- 동기화의 효율을 높이기 위해 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
'하.. > java' 카테고리의 다른 글
| ch14 함수형 인터페이스 (0) | 2021.12.25 |
|---|---|
| ch14 람다식 작성하기 (0) | 2021.12.25 |
| ch13 스레드의 동기화(synchronization) (0) | 2021.12.25 |
| ch13 join() yield() (0) | 2021.12.25 |
| ch13 스레드 실행 일시정지suspend() 재개 resume() 완전정지 stop() (0) | 2021.12.25 |