포스트

Thread thread state

Thread thread state

Thread - Thread State (23. 10. 19)

Thread의 상태 6가지

| 상태 | 설명 | | — | — | | NEW | thread가 실행 준비를 완료한 상태로, start() 함수를 호출하기 전 상태 | | RUNNABLE | start()가 호출되어 실행될 수 있는 상태 | | RUNNING | 해당 thread가 동작중인 상태 | | WAITING | 다른 thread가 통지할 때까지 기다리는 상태 | | TIMED_WAITING | 정해진 시간 동안 기다리는 상태 | | BLOCKED | 사용하고자 하는 객체의 잠금(lock)이 풀릴 때까지 대기하는 상태 | | TERMINATED | 실행이 종료된 상태 |

  • new

새로운 Thread 객체가 생성 되었지만 실행되기전

1
2
3
4
Thread thread = new Thread();
System.out.println(thread.getState());

NEW
  • RUNNABLE

언제든지 실행준비가 된 thread

r을 start() 시키고 getState() 한다.

1
2
3
4
5
6
7
8
9
10
RunableCounter r = new RunableCounter("ddd", 5);
r.start();
System.out.println(r.getThread().getState());

RUNNABLE
ddd : 1
ddd : 2
ddd : 3
ddd : 4
...
  • RUNNUNG

한 thread가 RUNNING이라면 다른 thread는 RUNNABLE, WATING등을 실행이 아닌 상태를 갖는다.

  • BLOCKED

Synchronized block을 다른 thread가 점유하고 있는 경우 기다리고 있는 상태

  • TERMINATED

Thread가 종료된 상태

  • TIMED_WAITING

WAITING과 동일하지만, 제한시간 설정이 가능

BLOCKED vs WATING

WAITINGBLOCKED
thread는 wait() 또는 join()을 호출할 때 WAINTING 상태가 된다. thread는 다른 thread가 notify() 또는 notifyAll()을 호출할 때까지 WAITING 상태를 유지한다.thread는 다른 thread에서 알림을 받았지만, 아직 object 잠금이 설정되지 않은 경우 이 상태가 된다.
WAITING thread는 다른 thread의 알림을 기다리고 있다.BLOCKED thread는 다른 thread가 잠금을 해제하기를 기다리고 있다.
WAITING thread가 중단될 수 있다.BLOCKED thread는 중단될 수 없다

Thread 상태 제어

  • interrupt() : WAITING → RUNNABLE
  • notify() : wait() 에 의한 WAITING → RUNNABLE
  • sleep() : 주어진 시간동안 thread를 TIMED_WAITING
  • join() : join()을 요청할 thread가 종료 할 때까지 대기

    1
    2
    3
    4
    
      counter1.start();
      counter2.start();
      counter1.getThread().join();
      counter2.getThread().join();
    
  • wait() : Synchonized block에서 thread를 WAITING 상태로 만든다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.