如何自定义BlockingQueue的阻塞行为

时间:2011-11-24 11:30:11

标签: java queue

我想创建一个阻塞队列,它根据自定义规则而不是队列中的项目数来阻止生产者。

例如:

生产者生成一些文件并放入队列。消费者在进行一些分析后将其转移到特定地点。

对于上面的场景,如果队列中的总文件大小达到某个阈值,我希望生产者等待生成新文件。如果总大小不超过阈值,队列可以接受任意数量的文件。

2 个答案:

答案 0 :(得分:3)

我可能会对BlockingQueue进行子类化,例如ArrayBlockingQueue,并添加一个简单的CountDownLatch,它会初始化为阈值并启用各种take / {{1达到0时的方法。

答案 1 :(得分:0)

我认为你必须自己实现这种锁定机制。您可以使用wait / notify或ReentrantLock / Condition,一个包含组合长度的长变量和一个包含文件的LinkedList。