package kr.or.didt.basic;
//쓰레드의 상태를 출력하는 예제
public class ThreadTest10 {
public static void main(String[] args) {
StatePrintThread th = new StatePrintThread(new TargetThread());
th.start();
}
}
//쓰레드 상태의 검사 대상이 되는 쓰레드가 하나 있어야됨
class TargetThread extends Thread{
@Override
public void run() {
for (long i = 1L; i <=20_000_000_000L; i++){}//시간 지연용
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO: handle exception
}
for(long i = 1L; i <=20_000_000_000L; i++){} //시간지연용
}
}
//TargerThread의 상태를 검사하고출력하는 쓰레드
class StatePrintThread extends Thread{
private TargetThread target;
//생성자 ==> TargerThread 초기화
public StatePrintThread(TargetThread target) {
this.target = target;
}
@Override
public void run() {
while(true){
// 쓰레드의 현재 상태값 구하기
Thread.State state = target.getState();
//thread안에 state emun을 사용(getState는 현재 상태값을 타나냄)
System.out.println("TargerThread의 현재 상태값 : " + state);
if(state == Thread.State.NEW){
//스레드가 NEW상태이면...
target.start();
}
if(state == Thread.State.TERMINATED){
//스레드가 종료 상태이면...
break;
}
try {
Thread.sleep(500);//0.5초 쉬었다 작업한다는 의미
} catch (InterruptedException e) {
// TODO: handle exception
}
}
}
}