Java ArrayBlockingQueue

In diesem Tutorial lernen wir anhand von Beispielen die ArrayBlockingQueue-Klasse und ihre Methoden kennen.

Die ArrayBlockingQueueKlasse des Java Collections-Frameworks stellt die Implementierung der Blockierungswarteschlange mithilfe eines Arrays bereit.

Es implementiert die Java BlockingQueue-Schnittstelle.

ArrayBlockingQueue erstellen

Um eine Array-Blockierungswarteschlange zu erstellen, müssen wir das java.util.concurrent.ArrayBlockingQueuePaket importieren .

Sobald wir das Paket importiert haben, können wir wie folgt eine Array-Blockierungswarteschlange in Java erstellen:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Hier,

  • Typ - Der Typ der Array-Blockierungswarteschlange
  • Kapazität - Die Größe der Array-Blockierungswarteschlange

Beispielsweise,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

Hinweis: Die Größe des Arrays muss angegeben werden.

Methoden von ArrayBlockingQueue

Die ArrayBlockingQueueKlasse bietet die Implementierung aller Methoden in der BlockingQueueSchnittstelle.

Diese Methoden werden verwendet, um Elemente in Array-Blockierungswarteschlangen einzufügen, darauf zuzugreifen und sie zu löschen.

Außerdem werden wir über zwei Verfahren erfahren , put()und take()dass die Unterstützung der Sperroperation im Array Sperr Warteschlange.

Diese beiden Methoden unterscheiden die Array-Blockierungswarteschlange von anderen typischen Warteschlangen.

Elemente einfügen

  • add()- Fügt das angegebene Element in die Array-Blockierungswarteschlange ein. Es wird eine Ausnahme ausgelöst, wenn die Warteschlange voll ist.
  • offer()- Fügt das angegebene Element in die Array-Blockierungswarteschlange ein. Es wird zurückgegeben, falsewenn die Warteschlange voll ist.

Beispielsweise,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals); ) ) 

Ausgabe

 ArrayBlockingQueue: (Hund, Katze, Pferd) 

Zugriffselemente

  • peek()- Gibt ein Element von der Vorderseite der Array-Blockierungswarteschlange zurück. Es wird zurückgegeben, nullwenn die Warteschlange leer ist.
  • iterator()- Gibt ein Iteratorobjekt zurück, um nacheinander auf Elemente aus der Array-Blockierungswarteschlange zuzugreifen. Es wird eine Ausnahme ausgelöst, wenn die Warteschlange leer ist. Wir müssen das java.util.IteratorPaket importieren , um es zu verwenden.

Beispielsweise,

 import java.util.concurrent.ArrayBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("ArrayBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Ausgabe

 ArrayBlockingQueue: (Hund, Katze, Pferd) Zugriffselement: Hund ArrayBlockingQueue Elemente: Hund, Katze, Pferd, 

Elemente entfernen

  • remove()- Gibt ein angegebenes Element zurück und entfernt es aus der Array-Blockierungswarteschlange. Es wird eine Ausnahme ausgelöst, wenn die Warteschlange leer ist.
  • poll()- Gibt ein angegebenes Element zurück und entfernt es aus der Array-Blockierungswarteschlange. Es wird zurückgegeben, nullwenn die Warteschlange leer ist.
  • clear() - Entfernt alle Elemente aus der Array-Blockierungswarteschlange.

Beispielsweise,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using remove() String element1 = animals.remove(); System.out.println("Removed Element:"); System.out.println("Using remove(): " + element1); // Using poll() String element2 = animals.poll(); System.out.println("Using poll(): " + element2); // Using clear() animals.clear(); System.out.println("Updated ArrayBlockingQueue: " + animals); ) ) 

Ausgabe

 ArrayBlockingQueue: (Hund, Katze, Pferd) Entfernte Elemente: Verwenden von remove (): Hund Verwenden von poll (): Cat Aktualisiert ArrayBlockingQueue: () 

put () und take () Methode

In Multithreading-Prozessen können wir den Betrieb eines Threads verwenden put()und take()blockieren, um ihn mit einem anderen Thread zu synchronisieren. Diese Methoden warten, bis sie erfolgreich ausgeführt werden können.

put () Methode

Um ein Element am Ende einer Array-Blockierungswarteschlange hinzuzufügen, können Sie die put()Methode verwenden.

Wenn die Array-Blockierungswarteschlange voll ist, wartet sie, bis in der Array-Blockierungswarteschlange Platz ist, um ein Element hinzuzufügen.

Beispielsweise,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Ausgabe

 ArrayBlockingQueue: (Hund, Katze) 

Hier kann die put()Methode eine auslösen, InterruptedExceptionwenn sie während des Wartens unterbrochen wird. Daher müssen wir es in einen try … catch-Block einschließen.

take () Methode

Um ein Element zurückzugeben und von der Vorderseite der Array-Blockierungswarteschlange zu entfernen, können wir die take()Methode verwenden.

Wenn die Array-Blockierungswarteschlange leer ist, wartet sie, bis Elemente in der Array-Blockierungswarteschlange gelöscht werden müssen.

Beispielsweise,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Ausgabe

 ArrayBlockingQueue: (Hund, Katze) Entferntes Element: Hund 

Hier wird die take()Methode eine auslösen, InterrupedExceptionwenn sie während des Wartens unterbrochen wird. Daher müssen wir es in einen try… catchBlock einschließen .

Andere Methoden

Methoden Beschreibungen
contains(element) Durchsucht die Array-Blockierungswarteschlange nach dem angegebenen Element. Wenn das Element gefunden wird, wird es zurückgegeben true, wenn nicht, wird es zurückgegeben false.
size() Gibt die Länge der Array-Blockierungswarteschlange zurück.
toArray() Konvertiert die Array-Blockierungswarteschlange in ein Array und gibt es zurück.
toString() Konvertiert die Array-Blockierungswarteschlange in eine Zeichenfolge

Warum ArrayBlockingQueue verwenden?

Der ArrayBlockingQueueverwendet Arrays als internen Speicher.

Es wird als thread-sichere Sammlung betrachtet. Daher wird es im Allgemeinen in Multithreading-Anwendungen verwendet.

Angenommen, ein Thread fügt Elemente in die Warteschlange ein und ein anderer Thread entfernt Elemente aus der Warteschlange.

Wenn der erste Thread langsamer als der zweite Thread ist, kann die Array-Blockierungswarteschlange den zweiten Thread warten lassen, bis der erste Thread seine Operationen abgeschlossen hat.

Interessante Beiträge...