[Java][Thread] 쓰레드의 실행 제어
2022. 6. 30. 15:22ㆍJAVA/Language
쓰레드의 스케줄링과 관련된 메서드
메서드 | 설명 |
static void sleep(long millis) static void sleep(long millis, int nanos) |
지정된 시간동안 쓰레드를 일시정지시킴. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기상태가 됨 |
void join() void join(long millis) void join(long millis, int nanos) |
지정된 시간동안 쓰레드가 실행되도록 합니다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속합니다. |
void interrupt() | sleep()이나 join()에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만듭니다. 해당 쓰레드에서는 InterruptedException이 발생함으로써 일시정지상태를 벗어나게 됩니다. |
void stop() (deprecated) | 쓰레드를 즉시 종료시킵니다. |
void suspend() (deprecated) | 쓰레드를 일시정지시킵니다. resume()을 호출하면 다시 실행대기상태가 됩니다. |
void resume() (deprecated) | suspend()에 의해 일시정지상태에 있는 쓰레드를 실행대기상태로 만듭니다. |
static void yield() | 실행 중에 자신에게 주어진 실행시간을 다른 쓰레드에게 양보(yield)하고 자신은 실행대기상태가 됩니다. |
쓰레드의 상태
상태 | 설명 |
NEW | 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 |
RUNNABLE | 실행 중 또는 실행 가능한 상태 |
BLOCKED | 동기화블럭에 의해서 일시정지된 상태 (lock이 풀릴 때까지 기다리는 상태) |
WATING TIMED_WAITING |
쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지 상태. TIMED_WATING은 일시정지시간이 지정된 경우를 의미함 |
TERMINATED | 쓰레드의 작업이 종료된 상태 |
(1) : 실행 대기 상태에 있다가 자신의 차례가 되면 실행상태가 됩니다.
(2) : 실행중에 suspend(), sleep(), wait(), join(), I/O block에 의해 일시정지 상태가 되는 경우입니다. I/O block은 입출력 작업에서 발생하는 지연상태를 말합니다. 사용자의 입력이 기다리는 경우를 예로 들 수 있는데, 이런 경우 일시정지 상태에 있다가 사용자가 입력을 마치면 다시 실행대기 상태가 됩니다.
(3) : 지정된 일시정지 시간이 다되거나(time-out), notify(), resume(), interrupt()가 호출되면서 일시 정지 상태를 벗어나 다시 실행 대기열에 저장되어 자신의 차례를 기다리게 됩니다.
References
source code : https://github.com/yonghwankim-dev/java_study/tree/main/ch13
JAVA 스레드(thread) 상태(객체 생성, 실행 대기, 일시 정지, 종료)
[도서] Java의 정석, 남궁 성 지음
'JAVA > Language' 카테고리의 다른 글
[Java][Thread] 쓰레드의 동기화 #2 Lock과 Condition을 이용한 동기화 (0) | 2022.07.05 |
---|---|
[Java][Thread] 쓰레드의 동기화 #1 synchronized, wait, notify (0) | 2022.07.01 |
[Java][Thread] 데몬 쓰레드(daemon thread) (0) | 2022.06.30 |
[Java][Thread] 쓰레드 그룹(thread group) (0) | 2022.06.30 |
[Java][Thread] 쓰레드의 우선순위 (0) | 2022.06.30 |