Java ArrayBlockingQueue

În acest tutorial, vom afla despre clasa ArrayBlockingQueue și metodele sale cu ajutorul exemplelor.

ArrayBlockingQueueClasa cadrului Java Collections prevede punerea în aplicare coadă de blocare folosind o matrice.

Implementează interfața Java BlockingQueue.

Crearea ArrayBlockingQueue

Pentru a crea o coadă de blocare a matricei, trebuie să importăm java.util.concurrent.ArrayBlockingQueuepachetul.

Odată ce am importat pachetul, iată cum putem crea o coadă de blocare a matricei în Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Aici,

  • Tipul - tipul cozii de blocare a matricei
  • capacitate - dimensiunea cozii de blocare a matricei

De exemplu,

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

Notă: Este obligatoriu să furnizați dimensiunea matricei.

Metode de ArrayBlockingQueue

ArrayBlockingQueueClasa asigură punerea în aplicare a tuturor metodelor din BlockingQueueinterfață.

Aceste metode sunt utilizate pentru a insera, accesa și șterge elemente din cozile de blocare a matricei.

De asemenea, vom afla despre două metode put()și take()care acceptă operația de blocare în coada de blocare a matricei.

Aceste două metode disting coada de blocare a matricii de alte cozi tipice.

Inserați elemente

  • add()- Inserează elementul specificat în coada de blocare a matricei. Aruncă o excepție dacă coada este plină.
  • offer()- Inserează elementul specificat în coada de blocare a matricei. Revine falsedacă coada este plină.

De exemplu,

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

Ieșire

 ArrayBlockingQueue: (câine, pisică, cal) 

Elemente de acces

  • peek()- Returnează un element din partea din față a cozii de blocare a matricei. Revine nulldacă coada este goală.
  • iterator()- Returnează un obiect iterator pentru a accesa secvențial elemente din coada de blocare a matricei. Aruncă o excepție dacă coada este goală. Trebuie să importăm java.util.Iteratorpachetul pentru al utiliza.

De exemplu,

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

Ieșire

 ArrayBlockingQueue: (câine, pisică, cal) Element accesat: Dog ArrayBlockingQueue Elemente: câine, pisică, cal, 

Eliminați elementele

  • remove()- Returnează și elimină un element specificat din coada de blocare a matricei. Aruncă o excepție dacă coada este goală.
  • poll()- Returnează și elimină un element specificat din coada de blocare a matricei. Revine nulldacă coada este goală.
  • clear() - Elimină toate elementele din coada de blocare a matricei.

De exemplu,

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

Ieșire

 ArrayBlockingQueue: (Câine, Pisică, Cal) Elemente îndepărtate: Utilizarea eliminării (): Câine Utilizarea sondajului (): Cat Actualizat ArrayBlockingQueue: () 

put () și take () Metodă

În procesele multithreading, putem utiliza put()și take()bloca funcționarea unui fir pentru a-l sincroniza cu alt thread. Aceste metode vor aștepta până când vor putea fi executate cu succes.

metoda put ()

Pentru a adăuga un element la sfârșitul unei cozi de blocare a matricei, putem folosi put()metoda.

Dacă coada de blocare a matricei este plină, așteaptă până când există spațiu în coada de blocare a matricei pentru a adăuga un element.

De exemplu,

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

Ieșire

 ArrayBlockingQueue: (câine, pisică) 

Aici, put()metoda poate arunca o InterruptedExceptiondacă este întreruptă în timp ce așteptați. Prin urmare, trebuie să îl închidem într-un bloc de încercare … captură.

take () Metodă

Pentru a returna și a elimina un element din partea din față a cozii de blocare a matricei, putem folosi take()metoda.

Dacă coada de blocare a matricei este goală, așteaptă până când există elemente în coada de blocare a matricei care trebuie șterse.

De exemplu,

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

Ieșire

 ArrayBlockingQueue: (câine, pisică) Element eliminat: câine 

Aici, take()metoda va arunca un InterrupedExceptiondacă este întrerupt în timp ce așteptați. Prin urmare, trebuie să îl închidem într-un try… catchbloc.

Alte metode

Metode Descrieri
contains(element) Căutați coada de blocare a matricei pentru elementul specificat. Dacă elementul este găsit, acesta revine true, dacă nu, revine false.
size() Returnează lungimea cozii de blocare a matricei.
toArray() Convertește coada de blocare a matricei într-o matrice și o returnează.
toString() Convertește coada de blocare a matricei în șir

De ce să folosiți ArrayBlockingQueue?

De ArrayBlockingQueueUtilizările matricele ca stocarea internă.

Este considerată o colecție sigură pentru fire . Prin urmare, este utilizat în general în aplicații multi-threading.

Să presupunem că un fir introduce elemente în coadă și un alt fir elimină elemente din coadă.

Acum, dacă primul fir este mai lent decât al doilea fir, atunci coada de blocare a matricei poate face ca al doilea fir să aștepte până când primul fir își finalizează operațiunile.

Articole interesante...