Rumah  >  Artikel  >  Java  >  Cara menggunakan CompletableFuture dalam Java untuk memberitahu apabila semua elemen diproses

Cara menggunakan CompletableFuture dalam Java untuk memberitahu apabila semua elemen diproses

王林
王林asal
2023-06-26 15:57:11857semak imbas

CompletableFuture di Java ialah alat pengaturcaraan tak segerak yang sangat berkuasa. Ia boleh membantu kami melaksanakan penghantaran tugas, pemprosesan, pemberitahuan dan operasi lain semasa pemprosesan tak segerak, sangat memudahkan kesukaran pengaturcaraan tak segerak. Apabila menggunakan CompletableFuture untuk pemprosesan tak segerak, terdapat senario yang perlu dimaklumkan selepas semua elemen diproses Artikel ini akan memperkenalkan cara menggunakan CompletableFuture dalam Java untuk melaksanakan senario ini.

Pertama sekali, anda perlu memahami konsep asas dan penggunaan CompletableFuture. CompletableFuture ialah kelas baharu dalam Java 8 yang menyediakan cara untuk memproses hasil apabila melaksanakan operasi secara tidak segerak. Ia membolehkan kami menggabungkan berbilang operasi tak segerak ke dalam operasi yang lebih kompleks dan menunggu semua operasi tak segerak selesai sebelum meneruskan ke langkah seterusnya.

Dalam senario pemberitahuan apabila semua elemen diproses, kita perlu menggunakan kaedah CompletableFuture: allOf. Kaedah ini boleh menggabungkan berbilang objek CompletableFuture bersama-sama dan mengembalikan objek CompletableFuture baharu selepas menunggu tugas tak segerak semua objek selesai.

Langkah asas menggunakan kaedah allOf adalah seperti berikut:

  1. Buat beberapa objek CompletableFuture untuk memproses elemen berbeza.
  2. Panggil kaedah CompletableFuture.allOf, masukkan semua objek CompletableFuture sebagai parameter dan tunggu semua tugas tak segerak selesai.
  3. Selepas semua tugas tak segerak selesai, kaedah allOf akan mengembalikan objek CompletableFuture baharu, yang boleh digunakan untuk pemprosesan seterusnya.

Di bawah, kami menggunakan contoh untuk menunjukkan cara menggunakan CompletableFuture untuk memberitahu apabila semua elemen diproses mengikut langkah di atas.

Pertama, kita perlu menentukan kelas Tugas untuk mensimulasikan pemprosesan tugas tak segerak. Kod sampel adalah seperti berikut:

import java.util.concurrent.CompletableFuture;

public class Task {
    public CompletableFuture<String> process(String element) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            // 模拟异步任务的处理过程
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return element.toUpperCase();
        });
        return future;
    }
}

Dalam kod di atas, kelas Tugas mentakrifkan kaedah proses untuk memproses setiap elemen dan mengembalikan objek CompletableFuture. Dalam kaedah ini, kami menggunakan kaedah CompletableFuture.supplyAsync untuk mensimulasikan pemprosesan tugas tak segerak, menukar elemen kepada huruf besar dan mengembalikannya. Pada masa yang sama, untuk mensimulasikan proses tugas tak segerak yang memakan masa, kami menambah tidur 1 saat pada tugasan itu.

Seterusnya, kami mentakrifkan kelas Utama dan menggunakannya dalam kombinasi dengan kelas Tugas dan CompletableFuture untuk memberitahu apabila semua elemen diproses. Kod sampel adalah seperti berikut:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

public class Main {
    public static void main(String[] args) {
        List<String> elements = new ArrayList<>();
        elements.add("hello");
        elements.add("world");
        elements.add("java");

        Task task = new Task();
        List<CompletableFuture<String>> futures = new ArrayList<>();

        // 遍历每个元素,并将它们的处理结果封装成一个CompletableFuture对象
        for (String element : elements) {
            CompletableFuture<String> future = task.process(element);
            futures.add(future);
        }

        // 等待所有异步任务完成,将它们的处理结果打印出来
        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
        allFutures.thenRun(() -> {
            System.out.println("所有异步任务已完成:");

            for (CompletableFuture<String> future : futures) {
                try {
                    String result = future.get();
                    System.out.println(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

Dalam kod di atas, kami mentakrifkan Senarai untuk menyimpan semua elemen, kemudian mencipta objek Tugas, melelang setiap elemen dan merangkum hasil pemprosesannya ke dalam objek CompletableFuture. Seterusnya, kami menggunakan kaedah CompletableFuture.allOf untuk menunggu semua tugas tak segerak disiapkan, dan selepas semua tugasan selesai, cetak hasil pemprosesan semua tugas melalui objek CompletableFuture yang dikembalikan oleh kaedah allOf.

Apabila kita menjalankan program di atas, kita dapat melihat output berikut:

所有异步任务已完成:
HELLO
WORLD
JAVA

Hasil larian program di atas menunjukkan bahawa semua tugas tak segerak telah diproses dan setiap elemen telah ditukar kepada huruf besar. Pada masa yang sama, kami juga berjaya melaksanakan fungsi pemberitahuan apabila semua elemen diproses.

Untuk meringkaskan, kaedah menggunakan CompletableFuture untuk memberitahu apabila semua elemen diproses ialah:

  1. Buat beberapa objek CompletableFuture untuk memproses elemen berbeza.
  2. Panggil kaedah CompletableFuture.allOf, masukkan semua objek CompletableFuture sebagai parameter dan tunggu semua tugas tak segerak selesai.
  3. Selepas semua tugas tak segerak selesai, kaedah allOf akan mengembalikan objek CompletableFuture baharu, yang boleh digunakan untuk pemprosesan seterusnya.

Secara amnya, CompletableFuture ialah alat pengaturcaraan tak segerak yang sangat mudah yang boleh membantu kami menggabungkan berbilang tugas tak segerak bersama-sama dan memberitahu apabila semua tugasan selesai. Dalam pembangunan sebenar, kami boleh menggunakan CompletableFuture dengan lebih baik untuk meningkatkan keselarasan kod dan kecekapan pelaksanaan berdasarkan kaedah pelaksanaan di atas dan senario perniagaan sebenar.

Atas ialah kandungan terperinci Cara menggunakan CompletableFuture dalam Java untuk memberitahu apabila semua elemen diproses. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn