Concurrency Средний

Замените написанную вручную координацию производитель-потребитель на 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() остаются прерываемыми.