n个线程产生到BlockingQueue
。 当队列已满时,消费者会排空队列并执行一些处理。阻塞队列设计
我应该如何决定以下两种实施方式?
选择A: 消费者定期轮询队列以检查它是否已满,所有写入者正在等待(毕竟这是一个阻塞队列:)。
选择B: 我使用同步的“put”方法实现自己的队列。在放置提供的元素之前,我测试队列是否接近满(全部减1元素)。然后,我把这个元素,并通知我的消费者(正在等待)。
第一种解决方案是最简单的方法,但可以进行轮询;这让我很烦恼。 第二种解决方案在我看来更容易出错,更多需要更多编码。
您还可以使用其他方式来沟通“开始处理”,例如, CountdownLatch。此外,为什么消费者不能只获取所有元素,并决定何时自行开始处理它们(例如在拥有N个元素之后?) –
然后,我的消费者会消耗所有元素,并在达到特定数量时元素,他处理它们。 在这种情况下,他会一直工作,并试图达到极限 我喜欢那个:)我会试试看看它是如何工作的... –