[JAVA] CompletableFuture Erste Schritte 2 (Versuchen Sie, CompletableFuture zu erstellen)

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.

Was unterscheidet sich von Future?

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.

Grundlegende Verwendung

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);
}

Bei Verwendung von 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

CompletableFuture Erste Schritte 2 (Versuchen Sie, CompletableFuture zu erstellen)
CompletableFuture Erste Schritte 3 (Versuchen Sie, eine asynchrone Anforderung auszugeben)
Versuchen Sie, einen einfachen Rückruf zu tätigen
Versuchen Sie, einen Iterator zu erstellen, der einen Blick darauf werfen kann
Schnittstelle Versuchen Sie, Java-Problem TypeScript 7-3 zu machen
Inkrementierungsverhalten Versuchen Sie, Java zum Problem TypeScript 3-4 zu machen
Zeichenfolgenoperation Versuchen Sie, das Java-Problem in TypeScript 9-3 zu ändern
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Erste Schritte mit Doma-Einführung in die Kriterien-API
Versuche Edelstein freizugeben
Initialisierung von for Versuchen Sie, das Java-Problem in TypeScript 5-4 zu ändern
Erste Schritte mit DBUnit
Erste Schritte mit Ruby
Versuchen Sie, ein Zusatzprogramm in mehreren Sprachen zu erstellen
Wie man ein schattiertes Glas macht
Erste Schritte mit Swift
Erste Schritte mit Doma-Transaktionen
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
[swift5] Versuchen Sie, einen API-Client auf verschiedene Arten zu erstellen
Erste Schritte mit der Verarbeitung von Doma-Annotationen
Erste Schritte mit Java Collection
Versuchen Sie Spring Boot von 0 bis 100.
Java - So erstellen Sie JTable
Schwere Abfragen asynchron durchführen
Erste Schritte mit JSP & Servlet
Abschließende Zukunft Erste Schritte (Erste Zukunft)
Erste Schritte mit Java Basics
Erste Schritte mit Spring Boot
[Schienen] Wie man Samen macht
Erste Schritte mit Ruby-Modulen
Zurück zum Anfang, Erste Schritte mit Java ② Steueranweisungen, Schleifenanweisungen
Versuchen Sie, mit JRuby eine plattformübergreifende Anwendung zu erstellen (Generierung von JAR-Dateien).
Versuchen Sie, aus der Kachel des Geographical Institute eine dreidimensionale CS-Zeichnungskachel zu erstellen