In diesem Tutorial lernen wir anhand von Beispielen die ArrayBlockingQueue-Klasse und ihre Methoden kennen.
Die ArrayBlockingQueue
Klasse 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.ArrayBlockingQueue
Paket 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 ArrayBlockingQueue
Klasse bietet die Implementierung aller Methoden in der BlockingQueue
Schnittstelle.
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,false
wenn 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,null
wenn 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 dasjava.util.Iterator
Paket 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,null
wenn 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, InterruptedException
wenn 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, InterrupedException
wenn sie während des Wartens unterbrochen wird. Daher müssen wir es in einen try… catch
Block 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 ArrayBlockingQueue
verwendet 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.