簡體   English   中英

CompletableFuture-使用thenapply與使用lambda塊的優勢

[英]Completablefuture - advantage of using thenapply vs using lambda block

我想知道使用lambda塊與使用thenApply()

我了解到lambda塊總是由執行supplyAsync()的函數的同一線程執行,而thenApply()塊可以由執行supplyAsync()的線程或調用者線程執行。

我還想知道,如果thenApply()僅在執行supplyAsync()函數之后supplyAsync()執行,為什么調用者線程會執行它呢?

CompletableFuture.supplyAsync(() -> {return doSomethingAndReturnA();})
                 .thenApply(a -> convertToB(a));

CompletableFuture.supplyAsync(() -> {
    A a = doSomethingAndReturnA();
    convertToB(a);
});

使用lambda塊,可以保證在同一個線程中調用這兩種方法,而在此線程之間沒有其他任何運行。

如果您已經具有CompletionStage / CompletableFuture (例如,在變量中或由某個方法調用返回),並且您希望對其結果進行后續處理,那么thenApply()會更加有用。

當您想訪問lambda范圍之外的中間結果(此處a )時,它也很有用,因為您可以只對中間CompletableFuture上的joint()進行訪問。

更高級的thenApplyAsync()也允許您異步處理該中間結果,這在lambda塊中很難實現。

在某些情況下,您可能只是基於可讀性來選擇一個或另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM