How to customize blocking behavior of BlockingQueue

旧时模样 提交于 2020-01-02 00:50:35

问题


I want to create a blocking queue which blocks producer on the basis of customized rules instead of number of items in the queue.

For example:

Producer produces some files and puts into a queue. Consumer transfers them to a specific location after some analysis.

For above scenario, I want producer waiting to produce new files if the size of total files in the queue reaches some threshold value. Queue can accept any number of files if the total size don't cross threshold value.


回答1:


I would probably subclass a BlockingQueue such as the ArrayBlockingQueue and add a simple CountDownLatch which is initialized to the threshold value and enables the various take/remove methods when reaching 0.




回答2:


I think you will have to implement this locking mechanism yourself. You could use wait/notify or ReentrantLock/Condition, a long variable holding the combined length and a LinkedList holding the files.



来源:https://stackoverflow.com/questions/8256324/how-to-customize-blocking-behavior-of-blockingqueue

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!