Verwenden Sie CompletableFuture, um asynchrone gleichzeitige Programmierung in Java zu implementieren: Erstellen Sie ein CompletableFuture: Erstellen Sie ein CompletableFuture über CompletableFuture.supplyAsync(), das eine parameterlose Methode als Parameter empfängt und einen Wert zurückgibt. Umgang mit Abschlusssituationen: Verwenden Sie die Methoden whenComplete(), thenApply(), thenAccept(), außergewöhnlich() und handle(), um Aufgabenabschluss-, Ausnahme- und Abbruchsituationen zu behandeln. Kombinieren von CompletableFutures: Verketten Sie zwei CompletableFutures mit der Methode thenCompose(). Praktischer Fall: Zeigt, wie man CompletableFuture verwendet, um parallel eine Liste von Benutzern aus der Datenbank abzurufen und die Details jedes Benutzers von einer Remote-API abzurufen.
Wie verwende ich CompletableFuture, um asynchrone gleichzeitige Programmierung in Java zu implementieren?
Einführung
CompletableFuture ist eine in Java 8 eingeführte Nebenläufigkeits-Dienstprogrammklasse, mit der Sie Aufgaben asynchron ausführen und deren Abschluss verwalten können. Es bietet eine elegantere und einfachere Möglichkeit zur Verwaltung der Parallelität als herkömmliche Threads.
Grundlegende Verwendung
Um ein CompletableFuture zu erstellen, können Sie die Methode CompletableFuture.supplyAsync() verwenden, die einen Lieferanten als Parameter akzeptiert. Lieferant ist eine Methode ohne Parameter und gibt einen Wert zurück.
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");
Erledigung abwickeln
Eines der Hauptmerkmale von CompletableFuture ist die Fähigkeit, den Abschluss von Aufgaben abzuwickeln. Es bietet eine Vielzahl von Methoden zur Behandlung von Abschluss-, Ausnahme- und Abbruchsituationen:
whenComplete()
: Führt die angegebene Aktion aus, nachdem die Aufgabe abgeschlossen ist, unabhängig davon, ob der Abschluss erfolgreich ist oder nicht. whenComplete()
:在任务完成后执行指定的动作,无论是否完成成功。thenApply()
:在任务成功完成后执行指定的函数并返回一个新值。thenAccept()
:在任务成功完成后执行指定的消费者。exceptionally()
:在任务失败后执行指定的异常处理程序并返回一个新值。handle()
:在任务完成后执行指定的函数,无论任务是否完成成功,并返回一个新值。组合 CompletableFuture
CompletableFuture 可以组合起来创建更复杂的并行任务。例如,您可以使用 thenCompose()
thenApply()
: Führt die angegebene Funktion aus und gibt einen neuen Wert zurück, nachdem die Aufgabe erfolgreich abgeschlossen wurde. thenAccept()
: Führt den angegebenen Verbraucher aus, nachdem die Aufgabe erfolgreich abgeschlossen wurde.
Exceptionally()
: Führt den angegebenen Ausnahmehandler aus und gibt einen neuen Wert zurück, nachdem die Aufgabe fehlschlägt.
handle()
: Führen Sie die angegebene Funktion nach Abschluss der Aufgabe aus, unabhängig davon, ob die Aufgabe erfolgreich abgeschlossen wurde, und geben Sie einen neuen Wert zurück. CompletableFutures können kombiniert werden, um komplexere parallele Aufgaben zu erstellen. Sie können beispielsweise die Methode thenCompose()
verwenden, um zwei CompletableFutures miteinander zu verketten:
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 2); future1.thenCompose(x -> future2.thenApply(y -> x + y));Praktischer Fall🎜🎜🎜Angenommen, wir haben die folgenden Aufgaben, die parallel ausgeführt werden müssen: 🎜🎜🎜 Aus der Benutzerliste der Datenbank abrufen 🎜🎜 Details zu jedem Benutzer von der Remote-API abrufen 🎜🎜🎜 Wir können CompletableFuture verwenden, um dies zu erreichen: 🎜
CompletableFuture<List<User>> futureUsers = CompletableFuture.supplyAsync(() -> getUsersFromDatabase()); CompletableFuture<Map<Integer, UserDetail>> futureDetails = CompletableFuture.supplyAsync(() -> { List<User> users = futureUsers.get(); return getUsersDetailsFromApi(users); }); CompletableFuture<List<User>> combinedFuture = futureUsers.thenCombine(futureDetails, (users, details) -> { for (User user : users) { user.setDetails(details.get(user.getId())); } return users; });🎜 Dieses Beispiel zeigt, wie Sie CompletableFuture verwenden, um Daten aus verschiedenen Quellen parallel abzurufen und zu kombinieren. 🎜
Das obige ist der detaillierte Inhalt vonWie verwende ich CompletableFuture, um asynchrone gleichzeitige Programmierung in Java zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!