У меня есть очередь блокировки объектов.
Я хочу написать поток, который блокирует, пока в очереди не появится объект. Аналогичен функциональности, предоставляемой 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 ... Любые комментарии приветствуются.