问题
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