Concurrency 중급

wait/notify 큐를 BlockingQueue로

수작업으로 작성한 생산자-소비자 조정 코드를 BlockingQueue로 대체합니다.

✕ Manual wait and notify
synchronized (queue) {
    while (queue.isEmpty()) {
        queue.wait();
    }
    Job job = queue.removeFirst();
    process(job);
}
✓ BlockingQueue
BlockingQueue<Job> queue = new LinkedBlockingQueue<>();

Job job = queue.take();
process(job);
이 코드에 문제가 있나요? 알려주세요.
🛡

더 안전한 조정

큐가 잠금과 조건 신호를 담당합니다.

👁

명확한 의도

put()과 take()는 생산자-소비자 동작을 직접적으로 표현합니다.

🎛

내장된 정책

제한된 용량, 공정성, 타임아웃 또는 논블로킹 연산을 선택할 수 있습니다.

이전 방식
수동 wait 및 notify
모던 방식
BlockingQueue
JDK 버전
5
난이도
중급
wait/notify 큐를 BlockingQueue로
사용 가능

JDK 5 (2004년) 이후 널리 사용 가능

올바른 wait/notify 코드는 공유 모니터, 조건 루프, 일치하는 알림, 신중한 인터럽트 처리를 필요로 합니다. BlockingQueue는 이러한 규칙을 캡슐화하고 생산자-소비자 워크플로를 위한 블로킹, 시간 제한, 논블로킹 연산을 제공합니다. put()과 take() 같은 호출은 여전히 인터럽트 가능합니다.