În acest tutorial, vom afla despre clasa ArrayBlockingQueue și metodele sale cu ajutorul exemplelor.
ArrayBlockingQueue
Clasa 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.ArrayBlockingQueue
pachetul.
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
ArrayBlockingQueue
Clasa asigură punerea în aplicare a tuturor metodelor din BlockingQueue
interfață.
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. Revinefalse
dacă 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. Revinenull
dacă 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ămjava.util.Iterator
pachetul 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. Revinenull
dacă 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 InterruptedException
dacă 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 InterrupedException
dacă este întrerupt în timp ce așteptați. Prin urmare, trebuie să îl închidem într-un try… catch
bloc.
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 ArrayBlockingQueue
Utiliză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.