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(); // 통지 - 대기중인 쓰레드 중 하나에게 알림.
}
}
'Java' 카테고리의 다른 글
137. 함수형 인터페이스 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.08 |
---|---|
136. 람다식 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.08 |
134. 쓰레드의 동기화 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.07 |
133. join(), yield() - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.07 |
132. suspend(), resume(), stop() - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.07 |