Java BlockingQueue с пакетной обработкой?

Меня интересует структура данных, идентичная Java BlockingQueue, за исключением того, что она должна иметь возможность группировать объекты в очереди. Другими словами, я хотел бы, чтобы производитель мог помещать объекты в очередь, но чтобы потребительский блок был на take () , пока очередь не достигнет определенного размера (размера пакета).

Затем, когда очередь достигает размера пакета, производитель должен заблокировать put () , пока потребитель не израсходует все элементы в очереди (в этом случае производитель снова начнет производство и потребительский блок до тех пор, пока партия не будет достигнута снова).

Существует ли подобная структура данных? Или я должен написать это (что я не против), я просто не хочу тратить свое время, если что-то там есть.


ОБНОВЛЕНИЕ

Может быть, чтобы немного прояснить ситуацию:

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

Проблема в том, что существует несколько таких установок параллельно и последовательно. Другими словами, производители производят товары для нескольких очередей, в то время как потребители сами по себе также могут быть производителями. Его легче представить как направленный граф производителей, потребителей-производителей и, наконец, потребителей.

Причина, по которой производители должны блокироваться до тех пор, пока очереди не опустеют (@Peter Lawrey), заключается в том, что каждая из них будет выполняться в потоке. Если вы оставите их просто производить по мере того, как станет доступным пространство, вы получите ситуацию, когда у вас слишком много потоков, пытающихся обработать слишком много вещей одновременно.

Может быть, связав это со службой выполнения, можно решить проблему?

17
задан Nico Huysamen 27 February 2012 в 16:16
поделиться