Rumah >Java >javaTutorial >penggunaan masa hadapan yang lengkap
CompletableFuture menyediakan kaedah yang dipanggil allOf
yang boleh digunakan untuk menunggu beberapa operasi tak segerak selesai. Kaedah allOf
mengambil bilangan pembolehubah CompletableFuture
sebagai argumen dan mengembalikan CompletableFuture
baharu yang lengkap apabila semua input CompletableFuture objek telah selesai.<code>allOf
that can be used to wait for multiple asynchronous operations to complete. The allOf
method takes a variable number of CompletableFuture
objects as arguments and returns a new CompletableFuture
that completes when all of the input CompletableFuture
objects have completed.
The following code sample shows how to use the allOf
method to wait for multiple asynchronous operations to complete:
<code class="java">CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "World"); CompletableFuture<Void> allOf = CompletableFuture.allOf(future1, future2); allOf.join(); System.out.println(future1.get()); // Prints "Hello" System.out.println(future2.get()); // Prints "World"</code>
CompletableFuture provides a cancel
method that can be used to cancel the asynchronous operation represented by the CompletableFuture
. The cancel
method takes a boolean argument that indicates whether or not the cancellation should be interrupting.
If the cancel
method is called with the interrupting flag set to true
, the asynchronous operation will be interrupted if it is still running. If the asynchronous operation has already completed, the cancel
method will have no effect.
If the cancel
method is called with the interrupting flag set to false
, the asynchronous operation will be cancelled if it has not yet completed. If the asynchronous operation has already completed, the cancel
method will have no effect.
The following code sample shows how to use the cancel
method to cancel an asynchronous operation:
<code class="java">CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "Hello World"; }); future.cancel(true); // Interrupt the asynchronous operation if (future.isCancelled()) { System.out.println("The asynchronous operation was cancelled."); }</code>
CompletableFuture provides methods for handling both exceptions and return values. The thenApply
and thenAccept
methods can be used to handle return values, while the exceptionally
and handle
methods can be used to handle exceptions.
The thenApply
method takes a function as an argument and returns a new CompletableFuture
that will be completed with the result of applying the function to the result of the original CompletableFuture
. The following code sample shows how to use the thenApply
method to handle a return value:
<code class="java">CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello World"); CompletableFuture<Integer> future2 = future.thenApply(s -> s.length()); future2.join(); System.out.println(future2.get()); // Prints 11</code>
The thenAccept
method takes a consumer as an argument and returns a new CompletableFuture
that will be completed when the consumer has been applied to the result of the original CompletableFuture
. The following code sample shows how to use the thenAccept
method to handle a return value:
<code class="java">CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello World"); CompletableFuture<Void> future2 = future.thenAccept(s -> System.out.println(s)); future2.join(); // Prints "Hello World"</code>
The exceptionally
method takes a function as an argument and returns a new CompletableFuture
that will be completed with the result of applying the function to the exception that caused the original CompletableFuture
to complete exceptionally. The following code sample shows how to use the exceptionally
method to handle an exception:
<code class="java">CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Error!"); }); CompletableFuture<String> future2 = future.exceptionally(e -> "Error occurred: " + e.getMessage()); future2.join(); System.out.println(future2.get()); // Prints "Error occurred: java.lang.RuntimeException: Error!"</code>
The handle
method takes a bi-function as an argument and returns a new CompletableFuture
that will be completed with the result of applying the bi-function to the result of the original CompletableFuture
and the exception that caused the original CompletableFuture
to complete exceptionally (if any). The following code sample shows how to use the handle
allOf
untuk menunggu beberapa operasi tak segerak selesai:🎜<code class="java">CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { if (Math.random() > 0.5) { return "Success"; } else { throw new RuntimeException("Error!"); } }); CompletableFuture<String> future2 = future.handle((result, exception) -> { if (exception != null) { return "Error occurred: " + exception.getMessage(); } else { return result; } }); future2.join(); System.out.println(future2.get()); // Prints "Success" or "Error occurred: java.lang.RuntimeException: Error!"</code>🎜Bagaimana mekanisme pembatalan CompletableFuture berfungsi?🎜🎜CompletableFuture menyediakan kaedah
batal
yang boleh digunakan untuk membatalkan operasi tak segerak yang diwakili oleh CompletableFuture
. Kaedah batal
mengambil hujah boolean yang menunjukkan sama ada pembatalan harus mengganggu atau tidak.🎜🎜Jika kaedah batal
dipanggil dengan bendera mengganggu ditetapkan kepada true
, operasi tak segerak akan terganggu jika ia masih berjalan. Jika operasi tak segerak telah selesai, kaedah batal
tidak akan mempunyai kesan.🎜🎜Jika kaedah batal
dipanggil dengan bendera mengganggu ditetapkan kepada false code>, operasi tak segerak akan dibatalkan jika ia masih belum selesai. Jika operasi tak segerak telah selesai, kaedah <code>batal
tidak akan mempunyai kesan.🎜🎜Sampel kod berikut menunjukkan cara menggunakan kaedah batal
untuk membatalkan operasi tak segerak:🎜 rrreee🎜Bagaimana untuk mengendalikan pengecualian dan mengembalikan nilai dengan CompletableFuture?🎜🎜CompletableFuture menyediakan kaedah untuk mengendalikan kedua-dua pengecualian dan nilai pulangan. Kaedah thenApply
dan thenAccept
boleh digunakan untuk mengendalikan nilai pulangan, manakala kaedah exceptionally
dan handle
boleh digunakan untuk mengendalikan pengecualian.🎜🎜Kaedah thenApply
mengambil fungsi sebagai hujah dan mengembalikan CompletableFuture
baharu yang akan dilengkapkan dengan hasil penggunaan fungsi pada hasil CompletableFuture
asal. Contoh kod berikut menunjukkan cara menggunakan kaedah thenApply
untuk mengendalikan nilai pulangan:🎜rrreee🎜Kaedah thenAccept
mengambil pengguna sebagai hujah dan mengembalikan baharu CompletableFuture
yang akan dilengkapkan apabila pengguna telah digunakan pada hasil CompletableFuture
asal. Contoh kod berikut menunjukkan cara menggunakan kaedah thenAccept
untuk mengendalikan nilai pulangan:🎜rrreee🎜Kaedah exceptionally
mengambil fungsi sebagai hujah dan mengembalikan baharu CompletableFuture
yang akan dilengkapkan dengan hasil penggunaan fungsi pada pengecualian yang menyebabkan CompletableFuture
asal selesai dengan luar biasa. Contoh kod berikut menunjukkan cara menggunakan kaedah exceptionally
untuk mengendalikan pengecualian:🎜rrreee🎜Kaedah handle
menggunakan dwifungsi sebagai hujah dan mengembalikan CompletableFuture
asal dan pengecualian yang menyebabkan CompletableFuture
asal selesai luar biasa (jika ada). Contoh kod berikut menunjukkan cara menggunakan kaedah handle
untuk mengendalikan nilai pulangan atau pengecualian:🎜rrreeeAtas ialah kandungan terperinci penggunaan masa hadapan yang lengkap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!