首頁  >  文章  >  Java  >  如何在 Java 中使用 CompletableFuture 實作非同步並發程式設計?

如何在 Java 中使用 CompletableFuture 實作非同步並發程式設計?

WBOY
WBOY原創
2024-05-04 17:03:01901瀏覽

在 Java 中使用 CompletableFuture 實作非同步並發程式設計:建立 CompletableFuture:透過 CompletableFuture.supplyAsync() 建立一個 CompletableFuture,它接收一個無參數方法作為參數,並傳回一個值。處理完成情況:使用 whenComplete()、thenApply()、thenAccept()、exceptionally() 和 handle() 方法處理任務的完成、例外和取消的情況。組合 CompletableFuture:使用 thenCompose() 方法將兩個 CompletableFuture 鍊式連接起來。實戰案例:展示如何使用 CompletableFuture 並行從資料庫取得使用者列表,並從遠端 API 取得每個使用者的詳細資訊。

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

如何在 Java 中使用 CompletableFuture 實作非同步並發程式設計?

簡介

CompletableFuture 是 Java 8 中引入的並發工具類,它允許您非同步執行任務並處理它們的完成情況。與傳統的線程相比,它提供了更優雅和簡化的方式來管理並發性。

基本用法

要建立一個 CompletableFuture,可以使用 CompletableFuture.supplyAsync() 方法,它接受一個 Supplier 作為參數。 Supplier 是一個沒有參數的方法,傳回一個值。

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");

處理完成情況

CompletableFuture 的主要功能之一是能夠處理任務的完成情況。它提供了多種方法來處理完成、異常和取消的情況:

  • whenComplete():在任務完成後執行指定的動作,無論是否完成成功。
  • thenApply():在任務成功完成後執行指定的函數並傳回一個新值。
  • thenAccept():在任務成功完成後執行指定的消費者。
  • exceptionally():在任務失敗後執行指定的例外處理程序並傳回一個新值。
  • handle():在任務完成後執行指定的函數,無論任務是否完成成功,並傳回一個新值。

組合 CompletableFuture

CompletableFuture 可以組合起來建立更複雜的平行任務。例如,您可以使用thenCompose() 方法將兩個CompletableFuture 鍊式連接起來:

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 2);

future1.thenCompose(x -> future2.thenApply(y -> x + y));

實戰案例

##假設我們有以下任務需要並行執行:

    從資料庫中取得使用者清單
  • 從遠端API 取得每個使用者的詳細資訊
  • ##我們可以使用CompletableFuture 來實作它:
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;
});

這個範例展示如何使用CompletableFuture 並行取得來自不同來源的資料並組合它們。

以上是如何在 Java 中使用 CompletableFuture 實作非同步並發程式設計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn