반응형

1. 일시정지(sleep)

주어진 시간 동안 일시 정지 상태(TIMED_WAITING)가 되고, 다시 실행 대기 상태(RUNNABLE)로 돌아간다.

일시정지 상태에서 주어진 시간이 되기 전에 interrupt() 메소드가 호출되면 InterruptedException이 발생 -> catch에서 실행 대기 상태로 가거나 종료 상태로 갈 수 있도록 한다. 


2. 실행 양보(yield)

실행 대기 상태로 돌아가고, 동일한 우선순위 또는 높은 우선순위를 갖는 다른 스레드가 실행 기회를 가질 수 있게 한다.


2. 다른 스레드의 종료를 기다림(join)

다른 스레드가 종료될 때까지 기다렸다가 실행함


3. wait(), notify(), notifyAll()

  • notify() : 공유객체가 한 스레드가 작업을 완료하면 notify()메소드를 호출해서 일시정지 상태에 있는 한 개의 스레드를 실행대기 상태로 만든다.
  • wait() :  다른 스레드를 실행대기 상태로 만들고 자신은 wait()로 일시정지 상태로 만든다. 
  • notifyAll() : wati()에 의해 이시 정지된 모든 스레드들을 실행 대기 상태로 만든다.
  • 이 메소드들은 동기화 메소드 또는 동기화 블록 내에서만 사용할 수 있다.
  • notify와 wait를 사용할 때 synchronized 를 사용하지 않으면 java.lang.IllegalMonitorStateException이 발생함.

두 개의 스레드가 이용하는 공유 객체.. 일종의 DTO라고 생각하면 될 듯..

Getter -> 데이터가 없으면 wait하고 데이터가 set 되길 기다림 / 데이터가 있으면 반환하고 null로 만듦

Setter -> 데이터가 없으면 data를 set하고 데이터가 있으면 wait하고 get하길 기다림

Data를 Set하는 Thread
Data를 Get하는 Thread
두 스레드를 이용하는 메인 스레드 

 

반응형

+ Recent posts