상태 제어
-실행 중인 스레드의 상태를 변경하는 것을 말한다.
-상태 변화를 가져오는 메소드의 종류
Thread가 가지고 있는 상태제어 함수를 살펴보면 다음과 같다.
sleep() :주어진 시간동안 일시 정지
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
//interrupt() 메소드가 호출되면 실행
}
-얼마 동안 일시 정지 상태로 있을 것인지, 밀리세컨드(1/1000)단위로 지정
-일시 정지 상태에서 interrupt()메소드가 호출되면 InterruptedException이 발생할 수 있기 때문에 예외처리를 꼭 해주어야 한다.
yield() :다른 스레드에게 실행 양보
-현재 실행하는 스레드를 실행대기 상태로 즉시 되돌리고 동일 또는 높은 우선순위의 스레드가 실행할 수 있도록 한다.
join() :다른 스레드의 종료를 기다림
-스레드가 두개 이상일 때 사용한다.
-계산 작업을 하는 A스레드로부터 계산 결과값을 받아 이것을 이용하여 B스레드가 작업을 처리할 때 주로 사용한다.
다음은 Thread가 가지고 있지 않지만 스레드와 관련되어 있는 메소드를 살펴본다.
wait(), notify(), notifyAll() : 스레드간 협업
-동기화 메소드 또는 동기화 블록에서만 호출 가능한 " Object메소드 "이다.
- wait()
-호출한 스레드는 일시 정지가 된다.
-다른 스레드가 notify() 또는 notifyAll()을 호출하면 실행 대기 상태가 된다.
- wait(long timeout), wait(long timeout, int nanos)
-notify()가 호출되지 않아도 시간이 지나면 스레드가 자동적으로 실행 대기 상태가 된다.
-하지만 sleep과 다른점은, 매개값으로 주어진 시간과 상관없이 다른 스레드가 notify(), notifyall()을 호출하면 그 즉시 실행 대기 상태가 된다.
-wait(), notify(), notifyAll()은 두 개의 스레드가 공유 객체를 가지고 교대로 번갈아 가며 실행해야 할 경우에 주로 사용한다.
본 포스팅은 이것이 자바다 책을 참고하여 작성하였습니다.
'Java 공부' 카테고리의 다른 글
12장 데몬 스레드 (0) | 2018.12.08 |
---|---|
12장 스레드 상태 제어(2) (0) | 2018.12.07 |
12장 스레드 상태 (0) | 2018.12.03 |
12장 동기화 메소드와 동기화 블록 (0) | 2018.12.02 |
12장 스레드 우선순위 (0) | 2018.12.02 |