본문 바로가기

아는 만큼 보인다/Concurrency

wait 메소드 사용시 지켜야 하는 것들

1. 항상 조건 검사 : wait(대기) 할지? 진행 할지?

2. wait에서 return 한 후에도 조건 검사 (notifyAll 에 의해 깨어난 경우, 여러 조건큐의 스레드가 깨어남)

3. 1번 2번의 이유로 wait 메소드는 반복문 안에서 호출

4. 조건 검사는 조건 큐의 lock에 의해 동기화

5. wait, notify, notifyAll 메소드를 호출할 때는 조건 큐에 해당하는 락을 확보

6. 조건 검사후 작업 진행시 작업이 완료 될때 까지 락을 해제하면 안됨


이 모든 것을 만족하는 코드의 표준적인 형태.

void myWait() throws InterreuptedException {
    synchronized(lock) {
        while(!myConditionCheck()) {
            lock.wait();
        }
    
        // TODO : my  job ...
    }
}


출처: 자바 병렬 프로그래밍

'아는 만큼 보인다 > Concurrency' 카테고리의 다른 글

Thread 상태  (0) 2014.11.19
Thread-Safe 를 위한 Keywords  (0) 2014.11.19
Executors 팩토리 클래스  (0) 2014.11.18
Synchronizers (동기화 클래스들)  (0) 2014.08.22
ConcurrentHashMap 특징 비교  (0) 2014.08.22