Java LinkedBlockingQueue

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

LinkedBlockingQueueClasa Java Collectionscadru prevede punerea în aplicare coadă de blocare cu ajutorul unei liste legate.

Implementează interfața Java BlockingQueue.

Crearea LinkedBlockingQueue

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

Iată cum putem crea o coadă de blocare legată în Java:

1. Fără capacitatea inițială

 LinkedBlockingQueue animal = new LinkedBlockingQueue(); 

Aici capacitatea inițială implicită va fi 2 31 -1.

2. Cu capacitatea inițială

 LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity); 

Aici,

  • Tip - tipul cozii de blocare conectate
  • capacitate - dimensiunea cozii de blocare conectate

De exemplu,

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

Notă: Nu este obligatoriu să furnizați dimensiunea listei conectate.

Metode de LinkedBlockingQueue

LinkedBlockingQueueClasa asigură punerea în aplicare a tuturor metodelor din interfața BlockingQueue.

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

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

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

Inserați elemente

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

De exemplu,

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

Ieșire

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

Elemente de acces

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

De exemplu,

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

Ieșire

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

Eliminați elementele

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

De exemplu,

 import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals); ) ) 

Ieșire

 LinkedBlockingQueue: (câine, pisică, cal) Elemente eliminate: folosind remove (): câine folosind sondaj (): Cat actualizat LinkedBlockingQueue: () 

metode put () și take ()

Î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.

put () Metoda

Pentru a insera elementul specificat la sfârșitul unei cozi de blocare conectate, folosim put()metoda.

Dacă coada de blocare legată este plină, așteaptă până când există spațiu în coada de blocare legată pentru a insera elementul.

De exemplu,

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

Ieșire

 LinkedBlockingQueue: (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 conectate, putem folosi take()metoda.

Dacă coada de blocare legată este goală, așteaptă până când vor fi șterse elemente în coada de blocare legată.

De exemplu,

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

Ieșire

 LinkedBlockingQueue: (câine, pisică) Element eliminat: câine Nou LinkedBlockingQueue: (pisică) 

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ăutează coada de blocare legată pentru elementul specificat. Dacă elementul este găsit, se întoarce true, dacă nu, se întoarce false.
size() Returnează lungimea cozii de blocare conectate.
toArray() Convertește coada de blocare legată într-o matrice și returnează matricea.
toString() Convertește coada de blocare legată în șir

De ce să folosiți LinkedBlockingQueue?

În LinkedBlockingQueueutilizările legate liste de stocare 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 legată poate face ca al doilea fir să aștepte până când primul fir își finalizează operațiunile.

Articole interesante...