質問: CompletableFuture.supplyAsync(initValueSupplier) .thenApplyAsync(multiply) .thenAcceptAsync(valueConsumer); } } ```
回答: 非同期処理の完了を待たずに`main`メソッドが終了してしまうためでしょう。 `main`メソッド終了後、プロセスの終了処理が完了する前に`System.out.println(value)`の出力が完了していれば、コンソール等に結果が出力されますが、それが間に合わないと結果が何も(場合によっては一部しか)表示されないと言うことになります。 極めてわずかなタイミングの差なので、ほんの1msecだけ`main`の完了を遅らせてやれば、確実に出力される(*)ようになるはずです。 ``` public static void main(String[] args) throws InterruptedException, ExecutionException { Supplier initValueSupplier = () -> 100; Function multiply = value -> value * 2; Consumer valueConsumer = value -> System.out.println(value); CompletableFuture future = CompletableFuture.supplyAsync(initValueSupplier) .thenApplyAsync(multiply) .thenAcceptAsync(valueConsumer); Thread.sleep(1); //<- `main`の完了を1msec遅らせる } ``` (*)「確実に出力される」のは、この問題に限っての話で、実際に非同期処理の終了を確実に完了するのを待つ場合には、yohjp さんのコメントなども参考にしてください。