How to customize blocking behavior of BlockingQueu

2020-08-11 03:42发布

问题:

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.



标签: java queue