Java ArrayBlockingQueue

V tomto tutoriáli sa pomocou príkladov dozvieme o triede ArrayBlockingQueue a jej metódach.

ArrayBlockingQueueTrieda rámci Java Kolekcia obsahuje implementáciu blokovanie fronty pomocou poľa.

Implementuje rozhranie Java BlockingQueue.

Vytvára sa ArrayBlockingQueue

Ak chcete vytvoriť front blokujúcich pole, musíme java.util.concurrent.ArrayBlockingQueuebalíček importovať .

Po importovaní balíka môžeme vytvoriť postup blokovania polí v Jave takto:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Tu,

  • Typ - typ frontu blokovania polí
  • kapacita - veľkosť frontu na blokovanie poľa

Napríklad,

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

Poznámka: Je potrebné uviesť veľkosť poľa.

Metódy ArrayBlockingQueue

ArrayBlockingQueueTrieda poskytuje realizáciu všetkých metód v BlockingQueuerozhraní.

Tieto metódy sa používajú na vkladanie, prístup a mazanie prvkov z frontov blokujúcich pole.

Tiež sa dozvieme o dvoch metód put()a take()tejto podpory blokovanie premávky vo fronte blokujúce poľa.

Tieto dve metódy rozlišujú front blokujúcich pole od iných typických frontov.

Vložiť prvky

  • add()- Vloží zadaný prvok do frontu blokovania poľa. Ak je fronta plná, vyvolá výnimku.
  • offer()- Vloží zadaný prvok do frontu blokovania poľa. Vráti sa, falseak je rad plný.

Napríklad,

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

Výkon

 ArrayBlockingQueue: (pes, mačka, kôň) 

Prístupové prvky

  • peek()- Vráti prvok z prednej strany frontu blokovania poľa. Vráti sa, nullak je rad prázdny.
  • iterator()- Vráti objekt iterátora na postupný prístup k prvkom z frontu blokovania poľa. Ak je rad prázdny, vyvolá výnimku. Aby sme mohli java.util.Iteratorbalík použiť, musíme ho importovať .

Napríklad,

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

Výkon

 ArrayBlockingQueue: (Pes, Mačka, Kôň) Pristupovaný prvok: Pes Prvky ArrayBlockingQueue: Pes, Mačka, Kôň, 

Odstrániť prvky

  • remove()- Vráti a odstráni zadaný prvok z frontu blokovania poľa. Ak je rad prázdny, hodí výnimku.
  • poll()- Vráti a odstráni zadaný prvok z frontu blokovania poľa. Vráti sa, nullak je rad prázdny.
  • clear() - Odstráni všetky prvky z frontu blokovania poľa.

Napríklad,

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

Výkon

 ArrayBlockingQueue: (Pes, Mačka, Kôň) Odstránené prvky: Pomocou remove (): Pes pomocou ankety (): Cat Aktualizované ArrayBlockingQueue: () 

put () a take () metóda

V procesoch viacerých vlákien môžeme pomocou put()a take()blokovať činnosť jedného vlákna, aby sme ho synchronizovali s iným vláknom. Tieto metódy počkajú, kým sa dajú úspešne vykonať.

metóda put ()

Na pridanie prvku na koniec frontu na blokovanie poľa môžeme použiť put()metódu.

Ak je rad blokovania polí plný, čaká na pridanie prvku do frontu blokovania poľa.

Napríklad,

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

Výkon

 ArrayBlockingQueue: (pes, mačka) 

Tu môže put()metóda hodiť, InterruptedExceptionak je prerušená počas čakania. Preto ho musíme uzavrieť do bloku pokusu … chytiť.

metóda take ()

Na vrátenie a odstránenie prvku z prednej strany frontu na blokovanie poľa môžeme použiť take()metódu.

Ak je rad blokovania polí prázdny, čaká sa na odstránenie prvkov vo fronte blokovania polí.

Napríklad,

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

Výkon

 ArrayBlockingQueue: (Pes, Mačka) Odstránený prvok: Pes 

Tu take()metóda hodí InterrupedExceptionak je prerušená počas čakania. Preto ho musíme uzavrieť do try… catchbloku.

Iné metódy

Metódy Popisy
contains(element) Vyhľadá v rade na blokovanie poľa zadaný prvok. Ak sa prvok nájde, vráti sa true, ak nie, vráti sa false.
size() Vráti dĺžku frontu blokovania polí.
toArray() Skonvertuje rad blokujúcich polí na pole a vráti ho.
toString() Skonvertuje rad blokujúcich polí na reťazec

Prečo používať ArrayBlockingQueue?

K ArrayBlockingQueuepoužitie poľa ako jeho vnútornej pamäte.

Považuje sa za kolekciu bezpečnú pre vlákna . Preto sa všeobecne používa v aplikáciách s viacerými vláknami.

Predpokladajme, že jedno vlákno vkladá prvky do frontu a iné vlákno odstraňuje prvky z frontu.

Ak je teraz prvé vlákno pomalšie ako druhé vlákno, potom môže front blokovania polí spôsobiť, že druhé vlákno počká, kým prvé vlákno dokončí svoje operácie.

Zaujímavé články...