我正在寻找一种方法来阻止直到a BlockingQueue为空。
BlockingQueue
我知道,在多线程环境中,只要有生产者将项目放入BlockingQueue,就可能会出现队列变空并且几秒钟后队列中充满项目的情况。
但是,如果只有 一个 生产者,则它可能要等待(并阻止)直到队列停止为空后再将其放入队列。
Java /伪代码:
// Producer code BlockingQueue queue = new BlockingQueue(); while (having some tasks to do) { queue.put(task); } queue.waitUntilEmpty(); // <-- how to do this? print("Done");
你有什么主意吗?
编辑 :我知道包装BlockingQueue和使用额外的条件可以解决问题,我只是问是否有一些预制的解决方案和/或更好的选择。
使用wait()和的简单解决方案notify():
wait()
notify()
// Producer: synchronized(queue) { while (!queue.isEmpty()) queue.wait(); //wait for the queue to become empty queue.put(); } //Consumer: synchronized(queue) { queue.get(); if (queue.isEmpty()) queue.notify(); // notify the producer }