본문 바로가기

Programming/JAVA

멀티 스레드(9) - 스레드 풀 2 : 스레드 풀 생성 및 종료 3

 

 

○ 스레드풀의 종료

 

스레드풀의 스레드는 기본적으로 데몬 스레드가 아니기에, main 스레드가 종료되더라도 작업을 처리하기 위해 계속 실행 상태를 유지하게 됩니다. 그래서 main( ) 메서드 실행이 끝나도 애플리케이션 프로세스가 종료되지 않습니다. 종료를 위해서는 스레드풀을 종료시켜 스레드들이 종료 상태가 되도록 처리해야 합니다. 

 

ExecutorService는 종료와 관련해, 다음 세 개의 메서드를 제공합니다. 

 

리턴 타입 메서드명(파라미터) 설명
void shutdown( ) 현재 처리 중인 작업뿐만 아니라 작업 큐에 대기하고 있는 모든 작업을 처리한 뒤에 스레드폴을 종료한다.
List<Runnable> shutdownNow( ) 현재 작업 처리 중인 스레드를 interrupt해서 작업 중지를 시도하고, 스레드풀을 종료시킨다. 리턴값은 작업 큐에 있는 미처리된 작업(Runnable)의 목록이다.
boolean awaitTermination(long timeout,
 TimeUnit unit)
shutdown( ) 메서드 호출 이후, 모든 작업 처리를 timeout 시간 내에 완료하면 true를 리턴하고, 완료하지 못하면 작업 처리 중인 스레드를 interrupt하고 false를 리턴한다.

 

남아있는 작업을 마무리하고 스레드를 종료할 때는 shutdown( )을 일반적으로 호출하게 되고, 남아있는 작업 여부와 상관 없이 강제로 종료를 해야 할 때는 shutdownNow( )를 호출합니다.