java BlockingQueue не имеет блокировки заглядывать?

У меня есть очередь блокировки объектов.

Я хочу написать поток, который блокирует, пока в очереди нет объекта. Аналогично функциональности, предоставляемой BlockingQueue.take ().

Однако, поскольку я не знаю, смогу ли я успешно обработать объект, я хочу просто посмотреть () и не удалять объект. Я хочу удалить объект, только если смог успешно обработать его.

Итак, я хотел бы функцию блокировки peek (). В настоящее время peek () просто возвращается, если очередь пуста согласно javadocs.

Я что-то пропустил? Есть ли другой способ достичь этой функциональности?

РЕДАКТИРОВАТЬ:

Есть мысли о том, что если я просто использую потокобезопасную очередь, заглянул и уснул вместо этого?

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 ... Любые комментарии приветствуются.

Ответы на вопрос(7)

Ваш ответ на вопрос