Abschließender zukünftiger Beginn (Zukunft) Fortsetzung
CompletableFuture
Wie in der Abbildung gezeigt, ist "Completable Furure"
Es implementiert die Schnittstellen "Future" und "CompletionStage".
CompletionStage
ist eine in Java 8 eingeführte Schnittstelle.
CompletableFuture stellt eine asynchrone Verarbeitung dar und behält das Ergebnis bei, sobald es verfügbar ist.
CompletableFuture
Eine Zukunft, die explizit abgeschlossen werden kann (durch Festlegen von Wert und Status). Unterstützt abhängige Funktionen und Aktionen, die nach Abschluss ausgeführt werden und als Abschlussphase verwendet werden können. CompletableFuture@Oracle
Diese "Unterstützung für abhängige Funktionen und Aktionen, die nach Abschluss ausgeführt werden" ist ein Hauptmerkmal von "Completable Future"
Zusätzlich zu der Funktion "Zukunft" müssen Sie nicht auf eine zeitaufwändige Verarbeitung warten. Sie können Folgendes tun:
Wenn das Ergebnis des Prozesses verfügbar wird Sie können Benachrichtigungen ausgeben und Rückrufe ausführen, die durch Lambda-Ausdrücke und Methodenreferenzen definiert sind.
public Future<Double> getDoubleAsync(String variable){
//Erstellen Sie eine abschließbare Zukunft, die die Berechnungsergebnisse enthält
CompletableFuture<Double> futureValue = new CompletableFuture<>();
new Thread( () -> { //Verarbeiten Sie die Verarbeitung asynchron in einem anderen Thread
try {
//Zeitaufwändiger Prozess
double price = doSomeLongComputation(variable);
//Stellen Sie den resultierenden Wert ein
futureValue.complete(price);
} catch (Exception ex) {
futureValue.completeExceptionally(ex);
}
}).start();
//Gibt Future zurück, ohne auf die Berechnung zu warten
return futureValue;
}
So rufen Sie die obige Methode auf
//Der Rückgabetyp ist Future<Double>
Future<Double> futureValue = getDoubleAsync("test");
try {
//Rufen Sie hier an. Blockiert, wenn Wert nicht verfügbar ist
double value = futureValue.get();
System.out.printf("value is %.2f%n", value);
} catch (ExecutionException | InterruptedException e) {
throw new RuntimeException(e);
}
SupplyAsync
Die Klasse "CompletableFuture" verfügt über mehrere Factory-Methoden.
supplyAsync(Supplier supplier) Gibt eine neue CompletableFuture zurück, in der die in ForkJoinPool.commonPool () ausgeführte Task den angegebenen Lieferanten aufruft und mit den erhaltenen Werten asynchron abgeschlossen wird. supplyAsync@Oracke
public static Future<Double> getDoubleAsyncHandy(String arg) {
return CompletableFuture.supplyAsync(() -> doSomeLongComputation(arg));
}
Sie können "CompletableFuture" einfach wie oben beschrieben schreiben, indem Sie die Methode "supplyAsync" verwenden.
Recommended Posts