103 Stimmen

Wie verwendet man ConcurrentLinkedQueue?

Wie verwende ich eine ConcurrentLinkedQueue in Java?
Mit diesem LinkedQueue Muss ich mir Sorgen um die Gleichzeitigkeit in der Warteschlange machen? Oder muss ich nur zwei Methoden definieren (eine zum Abrufen von Elementen aus der Liste und eine weitere zum Hinzufügen von Elementen zur Liste)?
Hinweis: Diese beiden Methoden müssen natürlich synchronisiert werden. Richtig?


EDITAR: Was ich versuche, ist Folgendes: Ich habe eine Klasse (in Java) mit einer Methode zum Abrufen von Elementen aus der Warteschlange und eine andere Klasse mit einer Methode zum Hinzufügen von Elementen zur Warteschlange. Die hinzugefügten und aus der Liste abgerufenen Elemente sind Objekte meiner eigenen Klasse.

Eine weitere Frage: Muss ich dies in der remove-Methode tun:

while (queue.size() == 0){ 
  wait(); 
  queue.poll();
}

Ich habe nur einen Konsumenten und einen Produzenten.

0 Stimmen

Danke für die Antwort auf meine Frage. Was ich zu tun versuche, ist folgendes: Ich habe eine Klasse (in Java) mit einer Methode zum Abrufen von Elementen aus der Warteschlange und eine andere Klasse mit einer Methode zum Hinzufügen von Elementen zur Warteschlange. Die hinzugefügten und aus der Liste abgerufenen Elemente sind Objekte meiner eigenen Klasse.

2 Stimmen

Sie sollten Ihre Frage bearbeiten und diese Klarstellung in die Frage selbst aufnehmen.

1voto

Ben S Punkte 66945

Verwenden Sie sie einfach wie eine nicht-konkurrierende Sammlung. Die Concurrent[Collection]-Klassen umhüllen die regulären Sammlungen, so dass Sie nicht über die Synchronisierung des Zugriffs nachdenken müssen.

Editar: ConcurrentLinkedList ist eigentlich nicht nur ein Wrapper, sondern vielmehr eine bessere gleichzeitige Implementierung. In beiden Fällen müssen Sie sich nicht um die Synchronisierung kümmern.

0 Stimmen

ConcurrentLinkedQueue ist es nicht. Sie ist von Grund auf speziell für den gleichzeitigen Zugriff mehrerer Produzenten und Konsumenten entwickelt worden. Sie ist etwas ausgeklügelter als die einfachen Wrapper, die von Collections.synchronized* zurückgegeben werden.

0 Stimmen

Ja, in J2SE 5 wurden eine Menge netter Gleichzeitigkeitsfunktionen hinzugefügt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X