Я ищу способ блокировки до тех пор, пока 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");
Есть ли у вас какие-либо идеи?
EDIT: Я знаю, что упаковка BlockingQueue
и использование дополнительного условия сделают трюк, я просто спрашиваю, есть ли готовые решения и/или лучшие альтернативы.