JDK8 で CompletableFuture を使用する際の問題
伊谢尔伦
伊谢尔伦 2017-06-15 09:22:15
0
2
900
リーリー

結果は次のとおりです:

リーリー

上記コードの最終行をコメントアウトすると期待した結果が得られません。

プログラムを明示的に 10 秒間スリープさせる必要があるのはなぜですか?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(2)
某草草

のjavadocを参照してください: CompletableFuture.supplyAsync

指定された Supplier を呼び出すことによって取得された値を使用して、

で実行されているタスクによって非同期的に完了される新しい CompletableFuture を返します。 ForkJoinPool.commonPool()そして

の Javadoc:

ForkJoinPool.commonPool()このプールは静的に構築され、その実行状態はシャットダウンまたは shutdownNow の試行には影響されません。

ただし、このプールと進行中の処理は終了する前に、プログラム
によって自動的に終了されます。

最後にを入れれば期待通りの結果も得られますSystem.exit. Any program that relies on asynchronous task processing to complete before program termination should invoke commonPool().awaitQuiescence

いいねを押す +0
某草草

検索: デーモン スレッド
スレッドにデーモン スレッドのみが残っている場合、JVM は終了します。それ以外の場合、ユーザー スレッドが存在する場合、JVM は終了しません。
CompletableFuture.supplyAsync がデーモン スレッドを開始すると推測できます。実際、CompletableFuture はデフォルトで内部で ForkJoinPool を使用し、スレッド ファクトリ クラスを初期化します。 リーリー

彼の実装を見て、毎回デーモンを作成します。なぜメインスレッドがスリープしなければならないのかについては、簡単に理解できます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート