2013-07-27 4 views
0

public static void main 메서드에서와 같이 주 스레드를 실행할 때 메서드가 완료되면 스레드가 종료됩니다. 스레드를 종료하는 데 아무 것도하지 않습니다. 왜 ExecutorService의 경우. shutdown() 메소드가 있습니까? ExecutorService에 의해 관리되는 스레드가 완료 될 때까지 기다리지 못하는 이유는 무엇입니까?주 스레드에 종료 방법이없는 이유

답변

0

종료 메소드의 호출은 새 태스크가 실행 프로그램에 의해 승인되지 않는다는 것을 의미합니다. 집행자에게 제출 된 실행중인 태스크 (실행 완료까지)에 시간 종료를 부여 할 수 있습니다.

executor.shutdown(); 
try { 
    //blocks until all tasks have finished or timeout occurs 
    executor.awaitTermination(TimeUnit.MICROSECONDS , Long.MAX_VALUE); 
} catch (InterruptedException e) { 
    //Take some action at least Thread.currentThread().interrupt(); 
} 
+0

따라서 종료 메소드가 풀의 모든 작업자 스레드를 종료하지 않습니까? – Victor

+0

또한 왜했는지 설명 할 수 있습니다 : Thread.currentThread() .interrupt() ... Interrupt를 InterruptedException 내부로 보내는 이유는 무엇입니까? – Victor

+0

아니요, 그들은 RejectedExecutionException을 던져서 작업 수락을 멈 춥니 다. 인터럽트 부분은 이미 논의되었습니다 - 인터럽트를 삼키지 마십시오 (http://stackoverflow.com/questions/4906799/why-invoke-thread-currentthread-interrupt-when-catch-any-interruptexception) – bsd

관련 문제