○ 스레드풀의 종료
스레드풀의 스레드는 기본적으로 데몬 스레드가 아니기에, main 스레드가 종료되더라도 작업을 처리하기 위해 계속 실행 상태를 유지하게 됩니다. 그래서 main( ) 메서드 실행이 끝나도 애플리케이션 프로세스가 종료되지 않습니다. 종료를 위해서는 스레드풀을 종료시켜 스레드들이 종료 상태가 되도록 처리해야 합니다.
ExecutorService는 종료와 관련해, 다음 세 개의 메서드를 제공합니다.
리턴 타입 | 메서드명(파라미터) | 설명 |
void | shutdown( ) | 현재 처리 중인 작업뿐만 아니라 작업 큐에 대기하고 있는 모든 작업을 처리한 뒤에 스레드폴을 종료한다. |
List<Runnable> | shutdownNow( ) | 현재 작업 처리 중인 스레드를 interrupt해서 작업 중지를 시도하고, 스레드풀을 종료시킨다. 리턴값은 작업 큐에 있는 미처리된 작업(Runnable)의 목록이다. |
boolean | awaitTermination(long timeout, TimeUnit unit) |
shutdown( ) 메서드 호출 이후, 모든 작업 처리를 timeout 시간 내에 완료하면 true를 리턴하고, 완료하지 못하면 작업 처리 중인 스레드를 interrupt하고 false를 리턴한다. |
남아있는 작업을 마무리하고 스레드를 종료할 때는 shutdown( )을 일반적으로 호출하게 되고, 남아있는 작업 여부와 상관 없이 강제로 종료를 해야 할 때는 shutdownNow( )를 호출합니다.
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(9) - 스레드 풀 3 : 작업 생성과 처리 요청 2 (0) | 2025.01.13 |
---|---|
멀티 스레드(9) - 스레드 풀 3 : 작업 생성과 처리 요청 1 (0) | 2025.01.12 |
멀티 스레드(9) - 스레드 풀 2 : 스레드 풀 생성 및 종료 2 (0) | 2025.01.08 |
멀티 스레드(9) - 스레드 풀 2 : 스레드 풀 생성 및 종료 1 (2) | 2025.01.07 |
멀티 스레드(9) - 스레드 풀 1 : 스레드 풀의 정의 (0) | 2025.01.05 |