2017-08-23 3 views
0

Ich benutze eine LinkedBlockingQueue in Java und ich möchte ein Element in der Warteschlange halten, bevor Sie es in den Thread freigeben. Mit anderen Worten, ich möchte eine Verzögerung einrichten, bevor ein Element aus der Warteschlange entfernt wird.Wie man ein Element in einer LinkedBlockingQueue festhält?

private LinkedBlockingQueue<String> testQue = new LinkedBlockingQueue<String>() 
if (position.equals("leader")) { 
    //process this element as the last one 

Ist es möglich, zu tun?

+0

es ist mir nicht klar, was Sie erreichen möchten. Können Sie die Aufgabe etwas genauer erklären? – JensS

+0

Wenn ich Sie richtig verstehe, möchten Sie die Verarbeitung eines Elements verzögern, das in der Warteschlange verfügbar ist? Warum willst du das machen? Vielleicht betrachten Sie das Problem mit der falschen Perspektive. Wenn Sie erklären, was Sie erreichen möchten, kann Ihnen vielleicht jemand besser helfen. – codeCruncher

+0

Ich versuche eine Warteschlange zu verwenden, anstatt Thread.sleep zu verwenden, um eine Verzögerung für ein bestimmtes Element in der Warteschlange zu erzeugen. Mit anderen Worten, wenn ein Element in der Warteschlange "Anführer" ist, möchte ich verzögern oder 1 Sekunde warten. – CMPE

Antwort

0

Blick in die Dokumentation für LinkedBlockingQueue: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingQueue.html

E peek() Ruft, aber nicht entfernen, den Kopf dieser Warteschlange oder den Wert null zurück, wenn diese Warteschlange leer ist.

E poll() Ruft den Kopf dieser Warteschlange ab und entfernt ihn oder gibt null zurück, wenn diese Warteschlange leer ist.

E Abfrage (langes Timeout, TimeUnit-Einheit) Ruft den Kopf dieser Warteschlange ab und entfernt ihn, wobei er ggf. auf die angegebene Wartezeit wartet, bis ein Element verfügbar wird.

Sie haben zwei Möglichkeiten:

  1. Verwendung peek() Prozess das Element und ein pool() verwenden, wenn Sie fertig sind. Sie können auch eine Thread.sleep(time) zwischen peek() und pool() setzen, wenn Sie wirklich warten wollen, bis es fertig ist.
  2. Verwenden Sie poll(long timeout, TimeUnit unit), wenn Sie jetzt wie lange dauert, um das Element zu verarbeiten.
Verwandte Themen