Heim >Java >javaLernprogramm >Abschließbare zukünftige Verwendung
CompletableFuture bietet eine Methode namens allOf
, mit der auf den Abschluss mehrerer asynchroner Vorgänge gewartet werden kann. Die allOf
-Methode verwendet eine variable Anzahl von CompletableFuture
-Objekten als Argumente und gibt ein neues CompletableFuture
zurück, das abgeschlossen wird, wenn alle eingegebenen CompletableFuture-Objekte wurden abgeschlossen.<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
verwendet wird, um auf den Abschluss mehrerer asynchroner Vorgänge zu warten:🎜<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>🎜Wie funktioniert der Abbruchmechanismus von CompletableFuture?🎜🎜CompletableFuture bietet eine
cancel
-Methode, mit der der durch CompletableFuture
dargestellte asynchrone Vorgang abgebrochen werden kann. Die Methode cancel
benötigt ein boolesches Argument, das angibt, ob der Abbruch unterbrochen werden soll oder nicht.🎜🎜Wenn die Methode cancel
aufgerufen wird und das Unterbrechungsflag auf true gesetzt ist
wird der asynchrone Vorgang unterbrochen, wenn er noch läuft. Wenn der asynchrone Vorgang bereits abgeschlossen ist, hat die Methode cancel
keine Auswirkung.🎜🎜Wenn die Methode cancel
aufgerufen wird, während das Unterbrechungsflag auf false gesetzt ist. code> wird der asynchrone Vorgang abgebrochen, wenn er noch nicht abgeschlossen ist. Wenn der asynchrone Vorgang bereits abgeschlossen ist, hat die Methode <code>cancel
keine Auswirkung.🎜🎜Das folgende Codebeispiel zeigt, wie Sie mit der Methode cancel
einen asynchronen Vorgang abbrechen:🎜 rrreee🎜Wie behandelt man Ausnahmen und Rückgabewerte mit CompletableFuture?🎜🎜CompletableFuture bietet Methoden zur Behandlung von Ausnahmen und Rückgabewerten. Die Methoden thenApply
und thenAccept
können zur Verarbeitung von Rückgabewerten verwendet werden, während die Methoden exclusionally
und handle
verwendet werden können um Ausnahmen zu behandeln.🎜🎜Die thenApply
-Methode nimmt eine Funktion als Argument und gibt ein neues CompletableFuture
zurück, das mit dem Ergebnis der Anwendung der Funktion auf das Ergebnis der abgeschlossen wird Original CompletableFuture
. Das folgende Codebeispiel zeigt, wie die Methode thenApply
verwendet wird, um einen Rückgabewert zu verarbeiten:🎜rrreee🎜Die Methode thenAccept
verwendet einen Verbraucher als Argument und gibt einen neuen zurück CompletableFuture
, das abgeschlossen wird, wenn der Verbraucher auf das Ergebnis des ursprünglichen CompletableFuture
angewendet wurde. Das folgende Codebeispiel zeigt, wie die Methode thenAccept
verwendet wird, um einen Rückgabewert zu verarbeiten:🎜rrreee🎜Die Methode Exceptionally
verwendet eine Funktion als Argument und gibt einen neuen zurück CompletableFuture
, das mit dem Ergebnis der Anwendung der Funktion auf die Ausnahme abgeschlossen wird, die dazu geführt hat, dass das ursprüngliche CompletableFuture
ausnahmsweise abgeschlossen wurde. Das folgende Codebeispiel zeigt, wie die Methode Exceptionally
zum Behandeln einer Ausnahme verwendet wird:🎜rrreee🎜Die Methode handle
verwendet eine Bifunktion als Argument und gibt einen neuen CompletableFuture
, das mit dem Ergebnis der Anwendung der Bi-Funktion auf das Ergebnis des ursprünglichen CompletableFuture
und der Ausnahme, die den Abschluss des ursprünglichen CompletableFuture
verursacht hat, vervollständigt wird ausnahmsweise (falls vorhanden). Das folgende Codebeispiel zeigt, wie Sie die Methode handle
verwenden, um einen Rückgabewert oder eine Ausnahme zu behandeln:🎜rrreeeDas obige ist der detaillierte Inhalt vonAbschließbare zukünftige Verwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!