Java

Java / 스레드 제어와 생명 주기

Dear-J 2025. 5. 15. 18:59

스레드 생명 주기

New (새로운 상태)

스레드가 생성되고 아직 시작되지 않은 상태

>> Thread 객체가 생성되지만 start() 메서드가 호출되지 않은 상태

>> Thread thread = new Thread(runnable);

 

Runnable (실행 가능 상태)

스레드가 실행될 준비가 된 상태

>> 스레드는 실제로 CPU에서 실행 가능

>> thread.start();

>> Runnable 상태에 있는 모든 스레드가 동시에 실행되는 건 x

>> 스케쥴러의 실행 대기열에 있든 CPU에서 실제 실행되고 잇든 모두 Runnable 상태

 

Blocked (차단 상태)

스레드가 다른 스레드에 의해 동기화 락을 얻기 위해 기다리는 상태

>> synchronized 블록에 진입하기 위해 락을 얻어야 하는 경우

 

Waiting (대기 상태)

스레드가 다른 스레드의 특정 작업이 완료되기를 무기한 기다리는 상태

>> wait(), join() 메서드 호출될 때

 

Timed Waiting (시간 제한 대기 상태)

스레드가 특정 시간 동안 다른 스레드의 작업이 완료되기를 기다리는 상태

>> sleep(long millis), wait(long timeout), join(long millis) 메서드 호출될 떄

>> 주어진 시간이 경과하거나 다른 스레드가 해당 스레드를 깨우면 이 상태에서 벗어남

 

Terminated (종료 상태)

스레드의 실행이 완료된 상태

>> 정상 종료 or 예외 종료

>> 스레드는 한번 종료되면 다시 시작 x

 

체크 예외 재정의

자식 클래스에 재정의된 메서드는 부모 메서드가 던질 수 있는 체크 예외의 하위 타입만을 던지기 가능

원래 메서드가 체크 예외를 던지지 않으면 재정의된 메서드도 체크 예외 던지기 x

 

체크 예외를 run() 에서 던질 수 없게 강제함

>> 체크 예외를 try-catch 블록내에서 처리

 

Sleep 유틸리티

Thread.sleep()이 InterruptedException 체크 예외 발생시킴

>> 매번 try-catch 블록을 쓰기 번거로우니 간단한 유틸리티 만들어 사용

 

Join

main 스레드가 thread-1, thread-2가 종료될 때까지 기다림

>> main 스레드 Waiting 상태

join()을 호출하는 스레드는 대상 스레드가 Terminated 상태가 될 때까지 대기

>> Terminated 상태가 되면 다시 Runnable 상태가 되고 다음 코드 수행

 

join(ms) : 특정 시간 만큼만 대기하고 다시 Runnable 상태가 되면서 다음 코드 수행

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : 김영한, 김영한의 실전 자바 - 고급 1편

'Java' 카테고리의 다른 글

Java / 메모리 가시성  (0) 2025.05.19
Java / 인터럽트  (0) 2025.05.16
Java / 스레드 생성과 실행  (0) 2025.05.12
Java / 프로세스와 스레드  (0) 2025.05.11
Java / 컬렉션 프레임워크 - 순회, 정렬  (0) 2025.03.11