쓰레드의 상태를 출력하는 예제

조수경·2021년 11월 8일
0

고급자바

목록 보기
24/97
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
			}
		  }
		}
		
	}
	
	
	
profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보