如何自定义BlockingQueue的阻塞行为
我想创建一个阻塞队列,它根据自定义规则而不是队列中的项目数来阻止生产者。
例如:
生产者生成一些文件并放入队列。 一些分析后,消费者将它们转移到特定位置。
对于上面的场景,如果队列中的总文件大小达到某个阈值,我希望生产者等待生成新文件。 如果总大小不超过阈值,则队列可以接受任意数量的文件。
我可能会inheritance一个BlockingQueue
例如ArrayBlockingQueue
并添加一个简单的CountDownLatch
,它初始化为阈值,并在达到0时启用各种take
/ remove
方法。
我想你必须自己实现这种锁定机制。 您可以使用wait / notify或ReentrantLock / Condition,一个保存组合长度的long变量和一个包含文件的LinkedList。