項目中需要用到多管道資料查詢,使用CompletableFuture可以很好的滿足需求
什麼是CompletableFuture
可以實作異步任務,以及異步任務之間的協作
使用示例
String idcard = "100";
CompletableFuture<Void> future = CompletableFuture
//建立一個異步任務,從idcard擷取對應的id
.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return Integer.parseInt(idcard);
})
//如果出現異常,則傳回id=0
.exceptionally((e) -> 0)
//再根據id擷取對應的User
.thenApply((id) -> {
return User.builder()
.idcard(id.toString())
.id(id)
.name("name" + id)
.build();
})
//輸出到System.out
.thenAccept(System.out::println);
複制
常用接口
# 建立一個異步任務
CompletableFuture#supplyAsync
# 建立一個特殊的異步任務,當其關聯的異步任務任意一個完成時就傳回
CompletableFuture#anyOf
# 建立一個特殊的異步任務,當其關聯的異步任務都完成時就傳回
CompletableFuture#allOf
# 當發生異常時的處理邏輯:注意,出現異常後,執行邏輯還會繼續,并不會跳出來
CompletableFuture#exceptionally
# 繼續處理結果,并傳回新的結果
CompletableFuture#thenApply
# 與其他的異步任務結合,都執行完畢後再執行新的任務
CompletableFuture#thenCombine
# 繼續異步處理結果,并傳回新任務對應的CompletableFuture。與thenApplyAsync很類似,但是傳回結果更加友好,類似于stream中的flatMap
CompletableFuture#thenCompose
# 處理最後的結果
CompletableFuture#thenAccept
複制
參考
- CompletableFuture | thenApply vs thenCompose