JAVA chapter12. 멀티 스레드. 12.5 스레드 상태
JAVA/CONCEPT 2017. 11. 29. 13:45 |chapter12. 멀티 스레드.
12.5 스레드 상태
// 스레드 객체를 생성하고, start() 메소드를 호출하면 곧바로 스레드가 실행되는 것처럼 보이지만, 사실은 실행 대기 상태가 된다.
// 실행 대기 상태란 아직 스케줄링이 되지 않아서 실행을 기다리고 있는 상태를 말한다.
// 실행 대기 상태에 있는 스레드 중에서 스레드 스케줄링으로 선택된 스레드가 비로서 CPU를 점유하고 run() 메소드를 실행한다.
// 이때를 실행(Running) 상태라고 한다.
// 실행 상태의 스레드는 run() 메소드를 모두 실행하기 전에 스레드 스케줄링에 의해 다시 실행 대기 상태로 돌아갈 수 있다.
// 그리고 실행 대기 상태에 있는 다른 스레드가 선택되어 실행 상태가 된다.
// 이렇게 실행 대기 상태와 실행 상태를 번갈아가면서 자신의 run() 메소드를 조금씩 실행한다.
// getState() 메소드는 스레드 상태에 따라 다음 열거 상수를 리턴한다.
타겟 스레드의 상태를 출력하는 스레드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package sec05.exam01_state; public class StatePrintThread extends Thread { private Thread targetThread; public StatePrintThread(Thread targetThread) { this.targetThread = targetThread; } public void run() { while(true) { Thread.State state = targetThread.getState(); // 스레드의 상태 얻기 System.out.println("타겟 스레드 상태: " + state); if(state == Thread.State.NEW) { // 객체 생성 상태일 경우, 실행 대기 상태로 만듬 targetThread.start(); } if(state == Thread.State.TERMINATED) { // 종료 상태일 경우, while문을 종료함 break; } try { //0.5초간 일시 정지 Thread.sleep(500); } catch(Exception e) {} } } } | cs |
타겟 스레드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package sec05.exam01_state; public class TargetThread extends Thread { public void run() { for(long i=0; i<1000000000; i++) {} try { //1.5초간 일시 정지 (TIMED_WAITING) Thread.sleep(1500); } catch(Exception e) {} for(long i=0; i<1000000000; i++) {} } } | cs |
실행 클래스
1 2 3 4 5 6 7 8 | package sec05.exam01_state; public class ThreadStateExample { public static void main(String[] args) { StatePrintThread statePrintThread = new StatePrintThread(new TargetThread()); statePrintThread.start(); } } | cs |
'JAVA > CONCEPT' 카테고리의 다른 글
JAVA chapter12. 멀티 스레드. 12.7 데몬 스레드 (0) | 2017.11.29 |
---|---|
JAVA chapter12. 멀티 스레드. 12.6 스레드 상태 제어 (0) | 2017.11.29 |
JAVA chapter12. 멀티 스레드. 12.4 동기화 메소드와 동기화 블록 (0) | 2017.11.29 |
JAVA chapter12. 멀티 스레드. 12.3 스레드 우선순위 (0) | 2017.11.29 |
JAVA chapter12. 멀티스레드 12.1 멀티 스레드 개념. 12.2 작업 스레드 생성과 실행 (0) | 2017.11.28 |