2017-05-23 15 views
0

ラムダブロックを使用する利点を知りたい場合は、thenApply()を使用します。Completablefuture - ラプダブロックを使用したthenapplyとの比較の利点

supplyAsync()で関数を実行している同じスレッドがラムダブロックを常に実行するのに対して、thenApply()ブロックはsupplyAsync()を実行しているスレッドまたは呼び出し元スレッドで実行できることを理解します。

thenApply()は、supplyAsync()関数が実行された後に実行する必要がある場合、呼び出し元スレッドによって実行されるのはなぜですか?

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

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

答えて

0

ラムダブロックでは、両方のメソッドが同じスレッドで呼び出され、その間にそのスレッドで実行されていることは保証されます。

thenApply()は、すでにCompletionStage/CompletableFuture(変数やメソッド呼び出しによって返された変数など)があり、その結果に対して後続の処理が必要な場合に便利です。

ラムダの範囲外の中間結果(ここではa)にアクセスする場合は、にアクセスするためにはjoint()とするだけで便利です。

さらに進化したthenApplyAsync()では、ラムダブロックでは難しい非同期的にその中間結果を処理することができます。

可読性に基づいてどちらか一方を選択することもできます。

関連する問題