【发布时间】:2012-03-17 00:27:22
【问题描述】:
我对与 Java BlockingQueue 相同的数据结构感兴趣,但它必须能够批处理队列中的对象。换句话说,我希望生产者能够将对象放入队列,但让消费者阻塞take(),直到队列达到一定大小(批量大小)。
然后,一旦队列达到批量大小,生产者必须阻塞put(),直到消费者消耗完队列中的所有元素(在这种情况下,生产者将再次开始生产,消费者阻塞直到再次达到批次)。
是否存在类似的数据结构?或者我应该写它(我不介意),我只是不想浪费我的时间,如果有什么东西在那里。
更新
也许可以澄清一下:
情况总是如下。可以有多个生产者向队列中添加项目,但从队列中获取项目的消费者永远不会超过一个。
现在,问题在于这些设置中有多个并行和串行。换句话说,生产者为多个队列生产项目,而消费者本身也可以是生产者。这可以更容易地被认为是生产者、消费者-生产者,最后是消费者的有向图。
生产者应该阻塞直到队列为空(@Peter Lawrey)的原因是因为它们中的每一个都将在一个线程中运行。如果您让它们在空间可用时简单地产生,您最终会遇到一种情况,即您有太多线程试图一次处理太多事情。
也许将其与执行服务结合可以解决问题?
【问题讨论】:
标签: java queue producer-consumer blockingqueue