Rumah  >  Artikel  >  Java  >  Bagaimana untuk menggunakan CompletableFuture untuk melaksanakan pengaturcaraan serentak tak segerak di Java?

Bagaimana untuk menggunakan CompletableFuture untuk melaksanakan pengaturcaraan serentak tak segerak di Java?

WBOY
WBOYasal
2024-05-04 17:03:01895semak imbas

Gunakan CompletableFuture untuk melaksanakan pengaturcaraan serentak tak segerak dalam Java: Cipta CompletableFuture: Cipta CompletableFuture melalui CompletableFuture.supplyAsync(), yang menerima kaedah tanpa parameter sebagai parameter dan mengembalikan nilai. Mengendalikan situasi penyelesaian: Gunakan kaedah whenComplete(), thenApply(), thenAccept(), exceptionally(), dan handle() untuk mengendalikan situasi penyiapan tugas, pengecualian dan pembatalan. Menggabungkan CompletableFutures: Rantai dua CompletableFutures menggunakan kaedah thenCompose(). Kes praktikal: Menunjukkan cara menggunakan CompletableFuture untuk mendapatkan senarai pengguna daripada pangkalan data secara selari dan mendapatkan butiran setiap pengguna daripada API jauh.

如何在 Java 中使用 CompletableFuture 实现异步并发编程?

Bagaimana untuk menggunakan CompletableFuture untuk melaksanakan pengaturcaraan serentak tak segerak di Java?

Pengenalan

CompletableFuture ialah kelas utiliti serentak yang diperkenalkan di Java 8 yang membolehkan anda melaksanakan tugasan secara tidak segerak dan mengendalikan penyiapannya. Ia menyediakan cara yang lebih elegan dan ringkas untuk mengurus konkurensi daripada rangkaian tradisional.

Penggunaan asas

Untuk mencipta CompletableFuture, anda boleh menggunakan kaedah CompletableFuture.supplyAsync(), yang menerima Pembekal sebagai parameter. Pembekal ialah kaedah tanpa parameter dan mengembalikan nilai.

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");

Mengendalikan Penyelesaian

Salah satu ciri utama CompletableFuture ialah keupayaan untuk mengendalikan penyiapan tugas. Ia menyediakan pelbagai kaedah untuk mengendalikan situasi penyiapan, pengecualian dan pembatalan:

  • whenComplete(): Laksanakan tindakan yang ditentukan selepas tugasan selesai, tidak kira sama ada penyiapan itu berjaya atau tidak. whenComplete():在任务完成后执行指定的动作,无论是否完成成功。
  • thenApply():在任务成功完成后执行指定的函数并返回一个新值。
  • thenAccept():在任务成功完成后执行指定的消费者。
  • exceptionally():在任务失败后执行指定的异常处理程序并返回一个新值。
  • handle():在任务完成后执行指定的函数,无论任务是否完成成功,并返回一个新值。

组合 CompletableFuture

CompletableFuture 可以组合起来创建更复杂的并行任务。例如,您可以使用 thenCompose()

thenApply(): Jalankan fungsi yang ditentukan dan kembalikan nilai baharu selepas tugasan berjaya diselesaikan.

thenAccept(): Laksanakan pengguna yang ditentukan selepas tugasan berjaya diselesaikan.

exceptionally(): Laksanakan pengendali pengecualian yang ditentukan dan kembalikan nilai baharu selepas tugasan gagal.

handle(): Jalankan fungsi yang ditentukan selepas tugasan selesai, tidak kira sama ada tugasan itu berjaya diselesaikan dan kembalikan nilai baharu.
  • Menggabungkan CompletableFutures

CompletableFutures boleh digabungkan untuk mencipta tugas selari yang lebih kompleks. Sebagai contoh, anda boleh menggunakan kaedah thenCompose() untuk merangkaikan dua CompletableFutures:

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 2);

future1.thenCompose(x -> future2.thenApply(y -> x + y));

Kes praktikal🎜🎜🎜Andaikan kita mempunyai tugasan berikut yang perlu dilaksanakan secara selari: 🎜🎜🎜 Dapatkan daripada pangkalan data Senarai pengguna 🎜🎜 Dapatkan butiran setiap pengguna dari API jauh 🎜🎜🎜 Kita boleh menggunakan CompletableFuture untuk mencapainya: 🎜
CompletableFuture<List<User>> futureUsers = CompletableFuture.supplyAsync(() -> getUsersFromDatabase());

CompletableFuture<Map<Integer, UserDetail>> futureDetails = CompletableFuture.supplyAsync(() -> {
    List<User> users = futureUsers.get();
    return getUsersDetailsFromApi(users);
});

CompletableFuture<List<User>> combinedFuture = futureUsers.thenCombine(futureDetails, (users, details) -> {
    for (User user : users) {
        user.setDetails(details.get(user.getId()));
    }
    return users;
});
🎜 Contoh ini menunjukkan cara menggunakan CompletableFuture untuk mendapatkan data daripada sumber berbeza secara selari dan menggabungkannya. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan CompletableFuture untuk melaksanakan pengaturcaraan serentak tak segerak di Java?. 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