스레드 생명 주기
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 |