BlockingQueue когда, зачем и ради чего?

1,00
р.
У меня есть представление как работает этот класс, но хочется понять в какой ситуации его реализация принесет мне выгоды, я не могу даже придумать, помогите пожалуйста разобраться.

Ответ
BlockingQueue - это очередь Queue со следующими дополнениями:
Блокирующая операция take() - берет следующий элемент, если же очередь пустая - блокирует выполнение до появления элемента (до момента, когда перестанет быть пустой) Блокирующая операция put(E e) - помещает элемент в очередь, если очередь заполнена - блокирует выполнение до освобождения места в очереди и успешного помещения в нее нового элемента.
Предназначена для реализации взаимодействия "поставщик - потребитель". Реализации методов потокобезопасны (синхронизированы), так что и писать в нее, и читать из неё можно в несколько потоков. Цитата из JavaDoc:
Note that a BlockingQueue can safely be used with multiple producers and multiple consumers.
Пример 1: Пусть есть магазин с 3 входами и 2 кассами. Покупатели прут через 3 входа и выходят через 2 кассы. Очередь в кассы общая. Целесообразно хранить очередь покупателей в BlockingQueue.
Пример 2: Имеется конвейер, выпускающий детали. Для производства нужны заготовки. С нескольких автоматов предыдущего этапа производства поступают заготовки, роботы берут их и делают из них детали. На следующем этапе эти детали используются для производства узлов другими роботами. Целесообразно хранить очередь входящих заготовок и очередь исходящих деталей (для следующего этапа) в BlockingQueue.