MapleStory Cookie With Halo

☕ JAVA/☕ Class & Method

[JAVA][Thread]상태와 실행제어. sleep() & interrupt()

뉴이 NUEY 2024. 12. 5. 02:27
반응형

 

쓰레드의 상태
상태 설명
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. 예외의 종류.

 

0.0015초 동안 멈추게 한다.

❗ 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상태로 바꾼다.


참조영상

반응형