티스토리 뷰
3편 스레드 상태 및 제어
스레드 상태확인은 스레드 클래스에 있는 getState() 메소드를 사용하면 Thread.State 열거 상수를 리턴한다.
순서는 객체생성 > 실행대기 > 일시정지 > 실행대기 > 종료 순으로 상태가 변한다.
package test;
import java.lang.Thread.State;
public class Ex2 {
public static void main(String[] args) {
/*
* 상태 열거상수 설명
* 객체생성 NEW start()메소드가 호출되지 않은 상태
* 실행대기 RUNNABLE 실행 상태로 언제든지 갈 수 있는 상태
*
* 일시정지 WAITING 다른 스레드가 통지할 떄까지 기다리는 상태
* TIMED_WAITING 주어진 시간 동안 기다리는 상태
* BLOCKED 사용할 객체의 락이 푸릴 때까지 기다리는 상태
*
* 종료 TERMINATED 실행을 마친 상태
*/
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 2000000000; i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 2000000000; i++);
}
});
while (true) {
System.out.println(thread2.getState());
if (thread2.getState() == State.NEW) {
thread2.start();
System.out.println(thread2.getState());
} else if (thread2.getState() == State.TERMINATED) {
break;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
}
}
결과 값
NEW
RUNNABLE
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
RUNNABLE
TERMINATED
스레드 상태 제어
메소드 | 설명 |
interrupt() |
스레드가 일시 정지 상태가 되면 interruptedExcption 예외 발생시켜 catch문으로 이동시킨다. |
notify() notifyAll() |
동기화 블록에서 wait()메소드에 의해 일시 정지 상태로 된 스레드를 실행 대기 상태로 만든다. |
sleep(long mills) |
주어진 시간동안 스레드를 일시 정지 시킨 후 시간이 지나면 다시 실행 대기상태로 돌아간다. |
join() join(Long mills) |
메소드를 호출한 스레드는 일시 정지 상태가 되며, join()메소드를 멤버로 가진 스레드가 종료되거나 주어진 시간이 지나야 한다. |
wait() wait(Long mills) |
동기화 블록에서 스레드를 일시 정지 상태로 만든 후 notify()메소드를 이용하여 실행 대기상태로 만든다. 만약 매개값 을 입력하면 주어진 시간이 지나면 자동으로 실행 대기 상태로 간다. |
yield() | 실행 중 우선순위가 동일한 다른 스레드에 실행을 양보하고 실행 대기 상태가 된다. |
| 스레드의 안전성을 해친다고 판단하여 더이상 사용하지 않도록 권장된 메소드 |
'JAVA' 카테고리의 다른 글
(JAVA) 자바 스레드(Thread) 우선순위, 동기화 - 2편 (0) | 2017.03.30 |
---|---|
(JAVA) 자바 스레드(Thread) 객체생성 및 실행 - 1편 (0) | 2017.03.29 |
(JAVA) 자바 소수자리수 설정 Format, DecimalFormat (0) | 2017.02.12 |
(JAVA) 자바 Math, Random 클래스 알아보기 (0) | 2017.02.12 |
(JAVA) 자바 정규표현식 Regular Expression (0) | 2017.02.12 |