CompletableFuture覚え書き
CompletableFuture の一連の非同期処理 ほげAsync は、デフォルトでは ForkJoinPool.commonPool() という ExecutorService で実行されます。
そしてこの ExecutorService のワーカスレッドはデーモンスレッドであるため、非デーモンスレッドが無くなると(≒ メインスレッドが終了すると)プール内の処理を完了させること無くプロセスが終了します。
そのせいで、サンプルコードを走らせてみるとなぜか処理が想定通り行われていない、というような事象が発生することがあるようです。
そういった場合は、 main メソッドの最後に Thread.sleep() を入れるなどして、少しの間メインスレッドが終了してしまうのを留まらせると期待した結果が得られるでしょう。
関連リンク: