자바 공부 중 스레드 상태에 대한 내용을 자꾸 까먹게 되어 정리한 것에 대한 기록이다. 아래 책을 공부 중이다.
신용권, 임경균, 『이것이 자바다』, 한빛미디어(2023), p120-121.
1. Thread 상태의 3단계
아래 그림과 같이 Thread는 크게 3가지 상태를 가진다. 첫 번째는 스레드 객체가 새로 생성되는 객체 생성 단계이고, 두 번째는 실행을 기다리고 있는 상태인 실행 대기 상태이다. 실행 대기 중인 스레드들은 CPU 스케쥴링에 따라서 실행상태 <-> 실행대기상태를 반복하다가 일시정지가 되기도 하고 다시 실행 대기 상태가 되기도 한다. 이후 run() 메서드가 종료되어 더 이상 실행할 코드가 없으면 종료 상태에 도달하게 된다.
Thread 객체 생성 [ NEW ] |
실행 대기 [ RUNNABLE ] |
종료 [ TERMINATED ] |
||
일시정지 | ㅣ | ㅣ | ||
ㅣ__ | __ 실행 __ | __ __ | __ |
2. 일시정지를 위한 메소드
--> 일시 정지 | Thread.sleep(long milis) | |
Object.join() | join() 메소드를 호출한 스레드가 일시정지 상태로. join() 메소드를 가진 스레드가 종료되면 다시 실행 대기 상태로. (ex. main thread에서 threadA.join()을 호출하면 threadA가 종료될 때까지 main thread는 일시정지 상태) |
|
Object.wait() | ||
일시 정지 --> | Thread.interrupt() | [-> 실행대기 / 종료], thread 안전 종료에 이용 |
Object.notify() Object.notifyAll() |
[wait() 일시정지 -> 실행 대기] | |
실행 --> 실행 대기 | Thread.yield() |
728x90
'개발 언어 및 알고리즘 기초 > JAVA 기초' 카테고리의 다른 글
[Java] 스트림(Stream) 요소 처리 (0) | 2024.04.25 |
---|---|
[Java] Wrapper Class (래퍼 클래스, 포장 클래스) (0) | 2024.04.18 |
[JAVA] StringBuilder로 문자열 조작하기 (0) | 2024.04.17 |
[JAVA] Collection Framework 정리 (0) | 2024.04.12 |
[JAVA / 비트 논리 연산자] 비트 논리 연산자의 필요성 증명 과정 이해하기 (0) | 2024.03.04 |