【发布时间】:2014-04-08 07:13:52
【问题描述】:
我有一个有点不寻常的生产者/消费者用例。 我有一些生产者的真实世界用例,我希望他们能够将对象添加到集合中而不会阻塞。 消费者(只有一个)应该阻塞,直到集合中有一定数量的对象可用(例如 500),然后批量消费它们。虽然少于 500 个,但它应该阻塞并等待集合填满。我不介意队列是否在短时间内超过此值(700、1000 等)。
我目前似乎没有找到解决这个确切问题的解决方案。 我正在考虑使用 ConcurrentLinkedQueue 并让消费者定期检查队列是否有足够的数据,但这似乎适得其反。
另一个想法是使用 LinkedBlockingQueue。生产者不会阻塞(除非队列已满,这意味着它具有 Integer.MAX_VALUE 值 - 这不是我的情况,所以一切都很好)。消费者将执行 queue.take() 并将元素添加到内部集合中。当内部集合达到 500 个元素时,它将批量消耗它们。
你有什么建议吗?
谢谢!
【问题讨论】:
标签: java collections concurrency queue producer-consumer