[英]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.