


So verwenden Sie die Funktionen thenCompose und thenCombine von CompletableFuture für asynchrone Zusammenführungsvorgänge in Java
In Java stoßen wir häufig auf Szenarien, die asynchrone Vorgänge erfordern. Für diese Situation hat Java 8 die CompletableFuture-Klasse eingeführt, die uns umfangreiche asynchrone Programmiertools zur Verfügung stellt, um die asynchrone Programmierung einfacher und einfacher zu machen. Unter diesen sind thenCompose und thenCombine zwei häufig verwendete kombinierte asynchrone Operationsmethoden in der CompletableFuture-Klasse.
1. Die Verwendung von thenCompose
DiethenCompose-Methode wird verwendet, um eine CompletableFuture-Instanz in eine andere CompletableFuture-Instanz zu konvertieren. Insbesondere empfängt es einen Funktionsparameter, der als Eingabe das vom vorherigen CompletableFuture zurückgegebene Ergebnis verwendet und ein neues CompletableFuture-Objekt zurückgibt. Hier ist ein Beispiel:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 模拟计算耗时 try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return 10; }); CompletableFuture<Integer> result = future.thenCompose(value -> CompletableFuture.supplyAsync(() -> value * 2)); result.whenComplete((res, ex) -> { if (ex != null) { ex.printStackTrace(); } else { System.out.println(res); } });
Im obigen Code erstellen wir zunächst eine CompletableFuture-Instanz, die die Berechnungszeit in einem anderen Thread simuliert. Als nächstes verwenden wir die Methode thenCompose, um sie in eine neue CompletableFuture-Instanz umzuwandeln, die das von der vorherigen CompletableFuture zurückgegebene Ergebnis mit 2 multipliziert. Schließlich verwenden wir die Methode whenComplete, um Ergebnisse oder Fehlermeldungen auszugeben.
2. Die Verwendung der thenCombine-Methode
ThenCombine wird verwendet, um zwei CompletableFuture-Instanzen zu einer zusammenzuführen. Insbesondere empfängt es eine weitere CompletableFuture-Instanz und einen BiFunction-Parameter, der die von den beiden CompletableFutures zurückgegebenen Ergebnisse als Eingabe verwendet und ein neues CompletableFuture-Objekt zurückgibt. Hier ist ein Beispiel:
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> { // 模拟计算耗时 try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return 10; }); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> { // 模拟计算耗时 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return 5; }); CompletableFuture<Integer> result = future1.thenCombine(future2, (value1, value2) -> value1 + value2); result.whenComplete((res, ex) -> { if (ex != null) { ex.printStackTrace(); } else { System.out.println(res); } });
Im obigen Code erstellen wir zwei CompletableFuture-Instanzen, die jeweils die Ausführung von zwei Rechenaufgaben simulieren. Als Nächstes verwenden wir die Methode thenCombine, um die beiden CompletableFuture-Instanzen zu einer neuen Instanz zusammenzuführen, die die von den ersten beiden CompletableFutures zurückgegebenen Ergebnisse hinzufügt. Schließlich verwenden wir die Methode whenComplete, um Ergebnisse oder Fehlermeldungen auszugeben.
3. Verwenden Sie thenCompose und thenCombine, um komplexe asynchrone Operationen zu implementieren.
Wir haben die Verwendung der Methoden thenCompose und thenCombine bereits eingeführt, und beide sind sehr nützliche Methoden für asynchrone Operationen. Tatsächlich können wir sie auch verwenden, um komplexere asynchrone Vorgänge zu implementieren, beispielsweise Aggregationsvorgänge für mehrere Berechnungsergebnisse.
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> { // 模拟计算耗时 try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return 10; }); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> { // 模拟计算耗时 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return 5; }); CompletableFuture<Integer> future3 = CompletableFuture.supplyAsync(() -> { // 模拟计算耗时 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return 20; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2, future3); CompletableFuture<Integer> result = combinedFuture.thenCompose( voidResult -> CompletableFuture.supplyAsync(() -> { int sum = future1.join() + future2.join() + future3.join(); return sum; })); result.whenComplete((res, ex) -> { if (ex != null) { ex.printStackTrace(); } else { System.out.println(res); } });
Im obigen Code haben wir drei CompletableFuture-Instanzen erstellt, von denen jede die Ausführung einer Rechenaufgabe simuliert und die entsprechenden Ergebnisse zurückgibt. Als nächstes verwenden wir die CompletableFuture.allOf-Methode, um diese drei Instanzen zu kombinieren und eine neue CompletableFuture-Instanz zu erstellen. Hierbei ist zu beachten, dass die allOf-Methode eine CompletableFuture-Instanz vom Typ Void zurückgibt und ihr Rückgabewert null ist.
Dann verwenden wir die Methode thenCompose, um die obige CompletableFuture-Instanz, die null zurückgibt, in eine neue CompletableFuture-Instanz umzuwandeln, die die von den vorherigen drei CompletableFutures zurückgegebenen Ergebnisse hinzufügt. In der Rückruffunktion der thenCompose-Methode verwenden wir die Methode join(), um den Ergebniswert jeder CompletableFuture-Instanz abzurufen und entsprechende Berechnungen durchzuführen. Schließlich verwenden wir die Methode whenComplete, um Ergebnisse oder Fehlermeldungen auszugeben.
Im Allgemeinen sind thenCompose und thenCombine sehr nützliche Methoden in der CompletableFuture-Klasse. Sie können uns dabei helfen, asynchrone Vorgänge bequemer durchzuführen und die Parallelität und Ausführungseffizienz des Programms zu verbessern.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Funktionen thenCompose und thenCombine von CompletableFuture für asynchrone Zusammenführungsvorgänge in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.
