2017-05-06 7 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을 사용하고, 그래서 메인 스레드 종료가 프로세스 종료가 발생하지해야하지만, 그것은 사실이 아니다 밝혀 .

비동기 작업이 deamon 스레드로 실행되고 있습니까? 그러나 확인할 수는 없습니다.

+0

당신이 당신의 문제에 더 정교한 :

는 같은 명시 적 집행을 통과해야이 문제를 방지하려면? –

+0

코드 스 니펫 추가 –

답변

5

바와 같이 here 언급 :

있어서 supplyAsync 사용 CompletableFutures 모두 사이에서 공유되는 스레드 ForkJoinPool.commonPool().

그리고 here

ForkJoinPool 데몬 모드에서 스레드를 사용 언급 한 바와 같이

은 일반적으로 필요 명시 적으로 종료 프로그램 종료 시점에 수영장이 없다.

그래서 그렇습니다.

ExecutorService pool = Executors.newFixedThreadPool(5); 
final CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { 
       ... }, pool); 
관련 문제