Java CompletableFutureについて
JavaのCompletableFutureのthenCombineについて質問させてください
CompletableFutureのthenCombine使った下記の2つの例について質問があります。
例1
val a = CompletableFuture.supplyAsync {somethingHeavyProcess1()}
val b = CompletableFuture.supplyAsync {somethingHeavyProcess2()}
val conbinedResult = a.thenCombine(b){a, b -> someNextAction(a, b)}.join()
例2
val conbinedResult = CompletableFuture.supplyAsync {somethingHeavyProcess1()}
.thenCombine(CompletableFuture.supplyAsync {somethingHeavyProcess2()}){ a, b -> someNextAction(a, b)}.join()
質問内容
(1).
CompletableFutureのsupplyAsyncやrunAsyncの中の処理は、変数宣言されている所に来たら、
実行されるのでしょうか?
例1でa,bの所に来たら、中の処理(somethingHeavyProcess)がその段階で別スレッドで実行されるかどうか。
(2).
(1)がその通りの場合、
例1はsomethingHeavyProcess1と2は並行で実行され、両方が完了したらsomeNextAction()が処理されるのに対し、例2はsomethingHeavyProcess1が終わってからsomethingHeavyProcess2が直列で処理されるようなイメージを抱いてしますが(javascriptのPromiseのthenのようなイメージ)、これは正しいでしょうか?
もしかしたら、例2はthenCombineではなくthenCombineAsyncを使うとそれぞれが並列で実行されるのでしょうか?
0