Thread State(Thread 상태)

신광진·2021년 3월 18일
0

Java

목록 보기
6/19
post-thumbnail
post-custom-banner

Thread State(Thread 상태)


  • Thread의 상태
    - NEW
    - Thread가 생성되었지만 아직 start()가 호출되지 않은 상태

    	- RUNNABLE
    		- Thread가 실행중이거나 실행대기중인 상태
    
    	- BLOCKED
    		- 동기화 블럭에 의해 일시정지된 상태 (Lock이 풀릴 때 까지 기다리는 상태)
    
    	- WAITING
    		- THREAD의 작업이 종료되지 않았지만 대기중인 상태, 즉 실행불가능(UNRUNNABLE)한 상태
    
    	- TIMED-WAITING
    		- WAITING상태와 동일한 상태, 하지만 대기시간이 정해져 있음
    
    	- TERMINATED
    		- Thread가 작업을 종료된 상태
  • [Sample Code]

    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<10000000000L; i++) {
    			// 시간지연 loop
    			// RUNNABLE 
    		}
    		try {
    			Thread.sleep(1500); // TIMED_WAITING
    		} catch(InterruptedException e) {
    			e.printStackTrace();
    		}
    		for(long i=1; i<1000000000L; i++) {
    			// 시간지연 loop
    		}
    	}
    	
    }
    
    /**
     * Thread의 상태를 출력하기 위한 변수
     */
    class statePrintThread extends Thread {
    	private Thread targetThread; // 상태출력용 Thread를 저장할 변수
    	
    	public statePrintThread(Thread targetThread) {
    		this.targetThread = targetThread;
    	}
    	
    	@Override
    	public void run() {
    		while(true) {
    			Thread.State state = targetThread.getState();
    			System.out.println("Current Status : " + state);
    			
    			if(state == Thread.State.NEW) {
    				// State가 NEW이면 Thread를 실행함
    				targetThread.start();
    			}
    			
    			if(state == Thread.State.TERMINATED) {
    				// Thread가 소멸되면 반복문을 종료함
    				break;
    			}
    			
    			try {
    				Thread.sleep(500);
    			} catch(InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }

    출력결과

    Current Status : NEW
    Current Status : RUNNABLE
    Current Status : RUNNABLE
    Current Status : RUNNABLE
    Current Status : RUNNABLE
    Current Status : TIMED_WAITING
    Current Status : TIMED_WAITING
    Current Status : TIMED_WAITING
    Current Status : TERMINATED

Thread state, Thread life Cycle등으로 검색하면 Thread의 상태에 대해 더욱 자세히 알 수 있다.

현재 예제에서는 BLOCKED과 WAITING이 나와있지 않은데, WAITING은 TIMED_WAITING에서 대기시간을 지정해주지 않으면 WAITING이 된다.

BLOCKED는 추후에 동기화 블럭을 사용하는 예제에서 더욱 자세히 알아볼 예정이다.

profile
이거 왜안되냐
post-custom-banner

0개의 댓글