Я ищу способ заблокировать, пока 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
и использование дополнительного условия сделают свое дело, я просто спрашиваю, есть ли готовые решения и/или лучшие альтернативы.
peek
до тех пор, пока он не вернетnull
. Что такого в блокировке, что делает это решение неприемлемым? - person OldCurmudgeon   schedule 03.03.2013