본문 바로가기

Java 공부

12장 스레드 상태 제어(1)

상태 제어

-실행 중인 스레드의 상태를 변경하는 것을 말한다.

-상태 변화를 가져오는 메소드의 종류


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