Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java ArrayBlockingQueue: Fortgeschrittener Leitfaden zu blockierenden Queues und thread-sicheren Operationen

Java ArrayBlockingQueue

Erkunden Sie Java ArrayBlockingQueue – lernen Sie, wie Sie diese festgrößen blockierende Queue erstellen, manipulieren und thread-sicher nutzen mit klaren Beispielen.

Die ArrayBlockingQueue-Klasse im Java Collections Framework bietet eine begrenzte, thread-sichere Queue, die von einem Array unterstützt wird. Sie implementiert das BlockingQueue-Interface, was Producer und Consumer ermöglicht, über blockierende Operationen zu koordinieren.

Java ArrayBlockingQueue: Fortgeschrittener Leitfaden zu blockierenden Queues und thread-sicheren Operationen


ArrayBlockingQueue erstellen

Importieren Sie java.util.concurrent.ArrayBlockingQueue und instanziieren Sie mit fester Kapazität:

ArrayBlockingQueue<Type> queue = new ArrayBlockingQueue<>(capacity);

Wobei Type der Elementtyp und capacity die maximale Größe ist.

Hinweis: Kapazität ist obligatorisch; sie bestimmt die begrenzte Größe der Queue.


Kernmethoden von ArrayBlockingQueue

Die Klasse implementiert alle Methoden von BlockingQueue zum Einfügen, Abrufen und Entfernen von Elementen. Im Folgenden die häufigsten Operationen.

Elemente einfügen

ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5); animals.add("Dog"); animals.offer("Cat"); animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals);

Ausgabe: ArrayBlockingQueue: [Dog, Cat, Horse]

Auf Elemente zugreifen

String head = animals.peek(); System.out.println("Head element: " + head); Iterator<String> it = animals.iterator(); while (it.hasNext()) { System.out.print(it.next() + ", "); }

Ausgabe: Head element: Dog gefolgt von der Liste der Elemente.

Elemente entfernen

String removed1 = animals.remove(); String removed2 = animals.poll(); animals.clear(); System.out.println("Updated queue: " + animals);

Ausgabe: Updated queue: []


Blockierende Operationen: put() und take()

Diese Methoden sind essenziell für Producer-Consumer-Muster. Sie blockieren, bis die Operation durchgeführt werden kann, und gewährleisten Thread-Koordination.

put()

Fügt Element ein, wartet falls Queue voll. Kann InterruptedException werfen.

try { animals.put("Dog"); animals.put("Cat"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }

take()

Entfernt und gibt Head zurück, wartet falls Queue leer. Kann InterruptedException werfen.

try { String element = animals.take(); System.out.println("Removed: " + element); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }

Zusätzliche Komfort-Methoden

MethodeBeschreibung
contains(Object o)Gibt true zurück falls Queue angegebenes Element enthält.
size()Gibt aktuelle Anzahl Elemente zurück.
toArray()Konvertiert Queue in Array.
toString()String-Darstellung der Queue.

Warum ArrayBlockingQueue verwenden?

Weil es bietet:

Wenn ein Thread langsamer produziert als der Consumer konsumiert, blockiert der Consumer automatisch, vermeidet Busy-Waiting und sorgt für effiziente CPU-Nutzung.


Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java Kommentare: Typen, Verwendung und Best Practices
  3. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  4. Java Strings meistern: Erstellung, Methoden und Best Practices
  5. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  6. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  7. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  8. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  9. Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
  10. Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList