Java ArrayBlockingQueue

In deze tutorial leren we met behulp van voorbeelden over de klasse ArrayBlockingQueue en zijn methoden.

De ArrayBlockingQueueklasse van het Java Collections-framework biedt de implementatie van de blokkeerwachtrij met behulp van een array.

Het implementeert de Java BlockingQueue-interface.

ArrayBlockingQueue maken

Om een ​​array-blokkeerwachtrij te maken, moeten we het java.util.concurrent.ArrayBlockingQueuepakket importeren .

Nadat we het pakket hebben geïmporteerd, kunnen we als volgt een array-blokkeerwachtrij in Java maken:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Hier,

  • Type - het type van de array-blokkeerwachtrij
  • capaciteit - de grootte van de array-blokkeerwachtrij

Bijvoorbeeld,

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

Opmerking: het is verplicht om de grootte van de array op te geven.

Methoden van ArrayBlockingQueue

De ArrayBlockingQueueklasse zorgt voor de implementatie van alle methoden in de BlockingQueueinterface.

Deze methoden worden gebruikt om elementen in te voegen, te openen en te verwijderen uit wachtrijen voor arrayblokkering.

We zullen ook leren over twee methoden put()en take()die de blokkeringsoperatie in de array-blokkeerwachtrij ondersteunen.

Deze twee methoden onderscheiden de wachtrij voor het blokkeren van een array van andere typische wachtrijen.

Elementen invoegen

  • add()- Voegt het opgegeven element in de wachtrij voor het blokkeren van de array in. Het genereert een uitzondering als de wachtrij vol is.
  • offer()- Voegt het opgegeven element in de wachtrij voor het blokkeren van de array in. Het keert terug falseals de wachtrij vol is.

Bijvoorbeeld,

 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); ) ) 

Uitvoer

 ArrayBlockingQueue: (hond, kat, paard) 

Toegang tot elementen

  • peek()- Retourneert een element van de voorkant van de blokkeringswachtrij. Het keert terug nullals de wachtrij leeg is.
  • iterator()- Retourneert een iteratorobject om sequentieel toegang te krijgen tot elementen uit de array-blokkeerwachtrij. Het genereert een uitzondering als de wachtrij leeg is. We moeten het java.util.Iteratorpakket importeren om het te kunnen gebruiken.

Bijvoorbeeld,

 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(", "); ) ) ) 

Uitvoer

 ArrayBlockingQueue: (Dog, Cat, Horse) Betreden element: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse, 

Elementen verwijderen

  • remove()- Retourneert en verwijdert een gespecificeerd element uit de blokkeringswachtrij. Het genereert een uitzondering als de wachtrij leeg is.
  • poll()- Retourneert en verwijdert een gespecificeerd element uit de blokkeringswachtrij. Het keert terug nullals de wachtrij leeg is.
  • clear() - Verwijdert alle elementen uit de blokkeringswachtrij.

Bijvoorbeeld,

 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); ) ) 

Uitvoer

 ArrayBlockingQueue: (Dog, Cat, Horse) Verwijderde elementen: remove () gebruiken: Dog poll () gebruiken: Cat ArrayBlockingQueue bijgewerkt: () 

put () en neem () methode

In multithreading-processen kunnen we put()en take()gebruiken om de werking van een thread te blokkeren om deze te synchroniseren met een andere thread. Deze methoden wachten totdat ze met succes kunnen worden uitgevoerd.

put () methode

Om een ​​element aan het einde van een array-blokkeerwachtrij toe te voegen, kunnen we de put()methode gebruiken.

Als de array-blokkeerwachtrij vol is, wacht deze totdat er ruimte is in de array-blokkeerwachtrij om een ​​element toe te voegen.

Bijvoorbeeld,

 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); ) ) ) 

Uitvoer

 ArrayBlockingQueue: (hond, kat) 

Hier kan de put()methode een genereren InterruptedExceptionals deze wordt onderbroken tijdens het wachten. Daarom moeten we het omsluiten in een try… catch-blok.

take () methode

Om een ​​element van de voorkant van de array-blokkeerwachtrij terug te sturen en te verwijderen, kunnen we de take()methode gebruiken.

Als de array-blokkeerwachtrij leeg is, wacht deze totdat er elementen in de array-blokkeerwachtrij zijn die moeten worden verwijderd.

Bijvoorbeeld,

 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); ) ) ) 

Uitvoer

 ArrayBlockingQueue: (Dog, Cat) Element verwijderd: Dog 

Hier zal de take()methode een gooien InterrupedExceptionals deze wordt onderbroken tijdens het wachten. Daarom moeten we het in een try… catchblok omsluiten .

Andere methodes

Methoden Beschrijvingen
contains(element) Zoekt in de array-blokkeerwachtrij naar het opgegeven element. Als het element wordt gevonden, keert het terug true, zo niet, dan keert het terug false.
size() Retourneert de lengte van de array-blokkeerwachtrij.
toArray() Converteert array-blokkeerwachtrij naar een array en retourneert deze.
toString() Converteert de array-blokkeerwachtrij naar een string

Waarom ArrayBlockingQueue gebruiken?

Het ArrayBlockingQueuegebruikt arrays als interne opslag.

Het wordt beschouwd als een draadveilige verzameling. Daarom wordt het over het algemeen gebruikt in toepassingen met meerdere threads.

Stel dat een thread elementen in de wachtrij invoegt en een andere thread elementen uit de wachtrij verwijdert.

Als de eerste thread langzamer is dan de tweede thread, kan de array-blokkeerwachtrij de tweede thread laten wachten totdat de eerste thread zijn bewerkingen heeft voltooid.

Interessante artikelen...