Подтвердить что ты не робот

Как настроить блокирующее поведение BlockingQueue

Я хочу создать блокирующую очередь, которая блокирует производителя на основе настраиваемых правил вместо количества элементов в очереди.

Например:

Производитель создает несколько файлов и помещает их в очередь. Потребитель передает их в определенное место после некоторого анализа.

В приведенном выше сценарии я хочу, чтобы продюсер ожидал создания новых файлов, если размер общих файлов в очереди достигает некоторого порогового значения. Очередь может принимать любое количество файлов, если общий размер не пересекает пороговое значение.

4b9b3361

Ответ 1

Я бы предположил подкласс a BlockingQueue, например ArrayBlockingQueue и добавить простой CountDownLatch, который инициализируется пороговым значением и позволяет использовать различные методы take/remove при достижении 0.

Ответ 2

Я думаю, вам придется реализовать этот механизм блокировки самостоятельно. Вы можете использовать wait/notify или ReentrantLock/Condition, длинную переменную, содержащую объединенную длину, и LinkedList, содержащий файлы.