java BlockingQueue não tem uma espiada de bloqueio?

Eu tenho uma fila de bloqueio de objetos.

Eu quero escrever um thread que bloqueia até que haja um objeto na fila. Semelhante à funcionalidade fornecida pelo BlockingQueue.take ().

No entanto, como não sei se poderei processar o objeto com êxito, quero apenas peek () e não remover o objeto. Eu quero remover o objeto somente se eu puder processá-lo com êxito.

Então, eu gostaria de uma função de peek () de bloqueio. Atualmente, o peek () só retorna se a fila estiver vazia de acordo com os javadocs.

Estou esquecendo de algo? Existe outra maneira de conseguir essa funcionalidade?

EDITAR:

Alguma idéia sobre se eu usei apenas uma fila de thread thread e espiou e dormiu em vez disso?

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
    }
}

Observe que eu só tenho um thread consumidor e um thread produtor (separado). Eu acho que isso não é tão eficiente quanto usar um BlockingQueue ... Qualquer comentário apreciado.

questionAnswers(7)

yourAnswerToTheQuestion