У меня есть блокирующая очередь объектов.
Я хочу написать поток, который блокируется до тех пор, пока в очереди не будет объекта. Аналогично функциональности, предоставляемой BlockingQueue.take().
Однако, поскольку я не знаю, смогу ли я успешно обработать объект, я хочу просто заглянуть() и не удалить объект. Я хочу удалить объект, только если я успешно обработаю его.
Итак, мне нужна функция блокировки peek(). В настоящее время peek() просто возвращает, если очередь пуста в соответствии с javadocs.
Я что-то упустил? Есть ли другой способ достичь этой функциональности?
EDIT:
Любые мысли, если я просто использовал поточную безопасную очередь и заглянул и спал вместо этого?
public void run() {
while (!__exit) {
while (__queue.size() != 0) {
Object o = __queue.peek();
if (o != null) {
if (consume(o) == true) {
__queue.remove();
} else {
Thread.sleep(10000); //need to backoff (60s) and try again
}
}
}
Thread.sleep(1000); //wait 1s for object on queue
}
}
Обратите внимание, что у меня есть только один поток потребителей и один (отдельный) поток производителей. Я думаю, это не так эффективно, как использование BlockingQueue... Любые комментарии оценены.