본문 바로가기

하../java

ch13 wait()과 notify()

- 동기화의 효율을 높이기 위해 wait()(기다리기), notify()(통보)를 사용

-Object클래스에 정의되어 있으며, 동기화 블록 내에서만 사용할 수 있다.

  • wait() - 객체의 lock을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다.
  • notify() - waiting pool에서 대기중인 쓰레드 중에 하나를 깨운다
  • notifyAll() - waiting pool에서 대기중인 모든 쓰레드를 깨운다
class Account{
 int balance = 1000;
 
 public synchronized void withdraw(int money){ //출금 메소드
  while(balace < money){
   try{
    wait(); //대기 - 락을 풀고 기다린다. 통지를 받으면 락을 재획득(ReExtrance)
   } catch(InterruptedException e){}
  }
  balance -= money;
 }//withdraw
 
 public synchronized void deposit(int money){ //입금 메소드
  balance += money;
  notify(); //통지 - 대기중인 스레드 중 하나에게 알림.
 }
}
lock & condition? -> wait & notify 는 누가 호출했는지를 모른다. 그걸 개선한게 lock & condition