Ответ 1
Я бы предположил подкласс a BlockingQueue
, например ArrayBlockingQueue
и добавить простой CountDownLatch
, который инициализируется пороговым значением и позволяет использовать различные методы take
/remove
при достижении 0.
Я хочу создать блокирующую очередь, которая блокирует производителя на основе настраиваемых правил вместо количества элементов в очереди.
Например:
Производитель создает несколько файлов и помещает их в очередь. Потребитель передает их в определенное место после некоторого анализа.
В приведенном выше сценарии я хочу, чтобы продюсер ожидал создания новых файлов, если размер общих файлов в очереди достигает некоторого порогового значения. Очередь может принимать любое количество файлов, если общий размер не пересекает пороговое значение.
Я бы предположил подкласс a BlockingQueue
, например ArrayBlockingQueue
и добавить простой CountDownLatch
, который инициализируется пороговым значением и позволяет использовать различные методы take
/remove
при достижении 0.
Я думаю, вам придется реализовать этот механизм блокировки самостоятельно. Вы можете использовать wait/notify или ReentrantLock/Condition, длинную переменную, содержащую объединенную длину, и LinkedList, содержащий файлы.