반응형
쓰레드의 상태
상태 | 설명 |
NEW | 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태. |
RUNNABLE | start()한 상태. 실행 중 또는 실행 가능한 상태. |
BLOCKED | 동기화 블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태) |
WAITING, TIMED_WAITING | 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지 상태. TIME_WAITING은 일시정지 시간이 지정된 경우를 의미한다. |
TERMINATED | 쓰레드의 작업이 종료된 상태. |
쓰레드의 실행제어
메서드 | 설명 |
static void sleep(long millis) static void sleep(long millis, int nanos) |
지정된 시간동안 쓰레드가 잠든다(일시정지). 시간이 지나면 자동으로 다시 실행한다. (1000이 1초) |
void join() void join(long millis) void join(long millis, int nanos) |
지정된 시간이 지나거나 다른 쓰레드 실행이 끝날 때까지 기다린다. |
void interrupt() | seelp()이나 join()에 의해 잠든 쓰레드를 깨워 실행시킨다. |
void stop() | 쓰레드를 즉시 종료시킨다. |
void suspend() | 쓰레드를 일시정지 시킨다. |
void resume() | supend()에 의해 일시정지된 쓰레드를 다시 실행 시킨다. |
static void yield() | 쓰레드에 주어진 실행시간을 다른 쓰레드에게 양보(yield)한다. |
💡 static이 붙은 sleep()과 yield()는 다른 쓰레드가 아닌 자기자신에게 적용한다.
sleep()
: 현재 쓰레드를 지정된 시간동안 잠들게 한다.
❗ InterruptedException 는 Exception의 자손으로 예외 처리 필수.
2024.11.03 - [☕ 자바 JAVA/☕ 개념지식] - [JAVA]Error & Exception. 예외의 종류.
❗ static 메서드이기 때문에) Thread.sleep()이라고 적어야 한다.
위 코드는 쓰레드7을 잠들게 하는 것처럼 보이지만, 사실 main쓰레드가 잠드는 것이다.
이런 식으로 헷갈리지 않게 Thread.sleep()이라고 적어주어야 한다.
interrupt()
: 대기상태(WAITING)인 쓰레드를 실행대기 상태(RUNNABLE)로 만든다.
메서드 | 상태 |
void interrupt() | 쓰레드의 interrupted상태를 false에서 true로 변경. |
boolean isInterrupted() | 쓰레드의 interrupted상태 반환. |
static boolean interrupted() | 쓰레드의 interrupted상태를 반환하고, 상태를 false로 초기화한다. |
sleep(), wait(), join()된 쓰레드를 실행하게 한다.
- Thread에는 interrupt란 boolean 상태가 있다.
- start()되었을 때는 false로 RUNNABLE상태이다.
- interrupted() 는 static이기에 Thread.interrupted()라 적어야 한다.
- interrupted()를 사용하면 static method인 main메서드의 현재 상태를 반환하고
→ 이를 interrupat를 false. RUNNABLE상태로 바꾼다.
반응형
'☕ JAVA > ☕ Class & Method' 카테고리의 다른 글
[JAVA][Thread]join() & yield() (0) | 2024.12.09 |
---|---|
[JAVA][Thread]suspend() resume() stop(). 일시정지, 재개, 완전정지 (0) | 2024.12.06 |
[JAVA][Thread]Daemon Thread 데몬 쓰레드 (0) | 2024.12.03 |
[JAVA][Thread]우선순위 (0) | 2024.12.02 |
[JAVA][Thread]main쓰레드, join(), I/O Blocking (0) | 2024.12.02 |