2017-05-06 21 views
3

私はjava8アプリケーションを実行している、それは一度メインスレッドの終了のように見える、プロセスが終了します。メインスレッドが終了すると非同期タスクが終了しますか?

私は非同期に別のスレッドとして実行されますので、メインスレッドの出口がプロセスの終了を引き起こすことはありませんが、それは真実ではない判明期待以下

CompletableFuture cf = CompletableFuture.supplyAsync(() -> task.call()); 

     cf.thenRunAsync(() -> { 
      try { 
       System.out.println(Thread.currentThread()); 
       System.out.println((Double)cf.get() * 4.0); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       e.printStackTrace(); 
      } 
     }); 

のような非同期タスクを開始するcompletableFutureを使用しています。

私は非同期ジョブがデアモンスレッドとして実行されていると思いますか?しかし、確認することはできません。

+0

あなたがあなたの質問にもっと手の込んだ:

はあなたのような明示的な執行を渡す必要があり、これを避けるために? –

+0

コードスニペットを追加 –

答えて

5

としてはhere言及:

方法supplyAsync用いる全てCompletableFutures間で共有され スレッドプールForkJoinPool.commonPool()

そしてhere

ForkJoinPoolはデーモンモードでスレッドを使用して述べたように、プログラムの終了時に、このようなプールを明示的にシャットダウンする必要 は通常ありません。

だからそうであるようです。

ExecutorService pool = Executors.newFixedThreadPool(5); 
final CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { 
       ... }, pool); 
関連する問題