Java

135. wait()과 notify() - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 7. 16:57

1. 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(balance < money) {
            try {
                wait();	// 대기 - 락을 풀고 기다린다. 통지를 받으면 락을 재획득
            } catch(InterruptedException e) {}
        }
        balance -= money;
    }	// withdraw
    
    public synchronized void deposit(int money) {
        balance += money;
        notify();	// 통지 - 대기중인 쓰레드 중 하나에게 알림.
    }
}