java BlockingQueue nie ma blokującego podglądu?

Mam kolejkę blokowania obiektów.

Chcę napisać wątek, który blokuje, dopóki nie znajdzie się obiekt w kolejce. Podobny do funkcjonalności udostępnionej przez BlockingQueue.take ().

Ponieważ jednak nie wiem, czy będę w stanie pomyślnie przetworzyć obiekt, chcę tylko zajrzeć () i nie usunąć obiektu. Chcę usunąć obiekt tylko wtedy, gdy mogę go pomyślnie przetworzyć.

Chciałbym więc zablokować funkcję peek (). Obecnie peek () po prostu zwraca, jeśli kolejka jest pusta, jak na javadocs.

Czy czegoś mi brakuje? Czy jest inny sposób na osiągnięcie tej funkcjonalności?

EDYTOWAĆ:

Jakieś przemyślenia, czy po prostu użyłem bezpiecznej kolejki wątków, a zamiast tego zajrzałem i spałem?

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

Zauważ, że mam tylko jeden wątek konsumpcyjny i jeden (osobny) wątek producenta. Myślę, że to nie jest tak wydajne, jak użycie BlockingQueue ... Wszelkie komentarze doceniane.

questionAnswers(7)

yourAnswerToTheQuestion