Java BlockingQueue hat keinen blockierenden Peek?

Ich habe eine blockierende Warteschlange von Objekten.

Ich möchte einen Thread schreiben, der blockiert, bis sich ein Objekt in der Warteschlange befindet. Ähnlich der Funktionalität von BlockingQueue.take ().

Da ich jedoch nicht weiß, ob ich das Objekt erfolgreich verarbeiten kann, möchte ich nur spähen () und das Objekt nicht entfernen. Ich möchte das Objekt nur entfernen, wenn ich es erfolgreich verarbeiten kann.

Ich möchte also eine blockierende peek () - Funktion. Derzeit gibt peek () nur zurück, wenn die Warteschlange gemäß den Javadocs leer ist.

Vermisse ich etwas? Gibt es einen anderen Weg, um diese Funktionalität zu erreichen?

BEARBEITEN:

Irgendwelche Gedanken darüber, ob ich nur eine thread-sichere Warteschlange verwendet und stattdessen geschaut und geschlafen habe?

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

Beachten Sie, dass ich nur einen Consumer-Thread und einen (separaten) Producer-Thread habe. Ich denke, dies ist nicht so effizient wie die Verwendung einer BlockingQueue ... Kommentare sind willkommen.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage