結果は次のとおりです:
リーリー上記コードの最終行をコメントアウトすると期待した結果が得られません。
プログラムを明示的に 10 秒間スリープさせる必要があるのはなぜですか?
某草草2017-06-15 09:24:15
のjavadocを参照してください: CompletableFuture.supplyAsync
指定された Supplier を呼び出すことによって取得された値を使用して、で実行されているタスクによって非同期的に完了される新しい CompletableFuture を返します。
の Javadoc:ForkJoinPool.commonPool()
そして
ForkJoinPool.commonPool()
このプールは静的に構築され、その実行状態はシャットダウンまたは shutdownNow の試行には影響されません。
によって自動的に終了されます。最後にを入れれば期待通りの結果も得られます
System.exit
. Any program that relies on asynchronous task processing to complete before program termination should invokecommonPool().awaitQuiescence
返事0
某草草2017-06-15 09:24:15
検索: デーモン スレッド
スレッドにデーモン スレッドのみが残っている場合、JVM は終了します。それ以外の場合、ユーザー スレッドが存在する場合、JVM は終了しません。
CompletableFuture.supplyAsync がデーモン スレッドを開始すると推測できます。実際、CompletableFuture はデフォルトで内部で ForkJoinPool を使用し、スレッド ファクトリ クラスを初期化します。
リーリー