Как настроить поведение блокировки BlockingQueue - PullRequest
13 голосов
/ 24 ноября 2011

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

Например:

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

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

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

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

0 голосов
/ 24 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...