Heim  >  Artikel  >  Java  >  Wie verwende ich CompletableFuture, um asynchrone gleichzeitige Programmierung in Java zu implementieren?

Wie verwende ich CompletableFuture, um asynchrone gleichzeitige Programmierung in Java zu implementieren?

WBOY
WBOYOriginal
2024-05-04 17:03:01950Durchsuche

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.

如何在 Java 中使用 CompletableFuture 实现异步并发编程?

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 kombinieren

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn