4-2.(5) Thread의 상태
Thread의 상태
(1) NEW : 스레드가 생성되고 아직 start()가 호출되지 않은 상태
(2) RUNNABLE : 실행 중 또는 실행 가능한 상태
(3) BLOCKED : 동기화 블럭에 의해서 일시정지된 상태(lock이 풀릴때까지 기다리는 상태)
(4) WATTING, TIMED_WAITING : 스레드의 작업이 종료되지는 않았지만 실행가능하지 않은(UNRUNNABLE)일시정지 상태. TIMED_WAITING은 일시정지 시간이 지정된 경우임.
(5) TERMINATED : 스레드의 작업이 종료된 상태
Thread.class 안에 존재함
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
T10_ThreadStateTest
public class T10_ThreadStateTest {
public static void main(String[] args) {
StatePrintThread spt = new StatePrintThread(new TargetThread());
spt.start();
}
}
모니터링 대상 쓰레드
class TargetThread extends Thread{
@Override
public void run() {
for(long i=1; i<=1000000000L;i++) {} //시간 지연용
try {
Thread.sleep(1500);//1.5초
}catch(InterruptedException ex) {
ex.printStackTrace();
}
for(long i=1; i<1000000000L; i++) {}//시간 지연용
}
}
쓰레드의 상태를 출력하기 위한 쓰레드
- 1.상태를 출력할 쓰레드가 저장될 변수 필요
- 2.Thread의 상태 구하기 : getState()메서드 이용
- 3.new상태인지(new 상태면 start();)
terminated상태인지(종료 상태면 break; -> 무한루프 빠져나오기)
검사!
class StatePrintThread extends Thread{
private Thread targetThread; // 상태를 출력할 쓰레드가 저장될 변수
public StatePrintThread(Thread targetThread) {
this.targetThread = targetThread;
}
@Override
public void run() {
while(true) {
//Thread의 상태 구하기(getState()메서드 이용) -> public enum State {}
Thread.State state = targetThread.getState();
System.out.println("타겟 쓰레드의 상태값 : "+ state);
//new상태인지 검사
if(state == Thread.State.NEW) { // -> Runnable상태로 감
targetThread.start();
}
//타겟쓰레드가 종료상태인지 검사
if(state== Thread.State.TERMINATED) {
break; // 무한루프 빠져나오기
}
try {
Thread.sleep(500);//0.5초마다 getState 찍기
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
Author And Source
이 문제에 관하여(4-2.(5) Thread의 상태), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zhyun1220/4-2.5-Thread의-상태저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)