結果は次のとおりです:
上記コードの最終行をコメントアウトすると期待した結果が得られません。
プログラムを明示的に 10 秒間スリープさせる必要があるのはなぜですか?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
のjavadocを参照してください: CompletableFuture.supplyAsync
CompletableFuture.supplyAsync
指定された Supplier を呼び出すことによって取得された値を使用して、 で実行されているタスクによって非同期的に完了される新しい CompletableFuture を返します。 ForkJoinPool.commonPool()そして の Javadoc:
で実行されているタスクによって非同期的に完了される新しい CompletableFuture を返します。 ForkJoinPool.commonPool()そして
ForkJoinPool.commonPool()
ForkJoinPool.commonPool()このプールは静的に構築され、その実行状態はシャットダウンまたは shutdownNow の試行には影響されません。
によって自動的に終了されます。 最後にを入れれば期待通りの結果も得られますSystem.exit. Any program that relies on asynchronous task processing to complete before program termination should invoke commonPool().awaitQuiescence
最後にを入れれば期待通りの結果も得られますSystem.exit. Any program that relies on asynchronous task processing to complete before program termination should invoke commonPool().awaitQuiescence
System.exit
commonPool().awaitQuiescence
検索: デーモン スレッド スレッドにデーモン スレッドのみが残っている場合、JVM は終了します。それ以外の場合、ユーザー スレッドが存在する場合、JVM は終了しません。 CompletableFuture.supplyAsync がデーモン スレッドを開始すると推測できます。実際、CompletableFuture はデフォルトで内部で ForkJoinPool を使用し、スレッド ファクトリ クラスを初期化します。 リーリー
のjavadocを参照してください:
CompletableFuture.supplyAsync
ただし、このプールと進行中の処理は終了する前に、プログラムForkJoinPool.commonPool()
このプールは静的に構築され、その実行状態はシャットダウンまたは shutdownNow の試行には影響されません。検索: デーモン スレッド
彼の実装を見て、毎回デーモンを作成します。なぜメインスレッドがスリープしなければならないのかについては、簡単に理解できます。スレッドにデーモン スレッドのみが残っている場合、JVM は終了します。それ以外の場合、ユーザー スレッドが存在する場合、JVM は終了しません。
CompletableFuture.supplyAsync がデーモン スレッドを開始すると推測できます。実際、CompletableFuture はデフォルトで内部で ForkJoinPool を使用し、スレッド ファクトリ クラスを初期化します。 リーリー