Java ArrayBlockingQueue

Selles õpetuses õpime näidete abil klassi ArrayBlockingQueue ja selle meetodeid.

ArrayBlockingQueueKlassi Java Collections raames annab blokeerimise järjekorda rakendamise kasutades massiivi.

See rakendab Java BlockingQueue liidest.

ArrayBlockingQueue loomine

Massiivi blokeerimise järjekorra loomiseks peame java.util.concurrent.ArrayBlockingQueuepaketi importima .

Kui pakett on imporditud, saate Java-s massiivi blokeerimise järjekorra luua järgmiselt:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Siin,

  • Tüüp - massiivi blokeeriva järjekorra tüüp
  • maht - massiivi blokeerimise järjekorra suurus

Näiteks,

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

Märkus: massiivi suurus on kohustuslik.

ArrayBlockingQueue meetodid

ArrayBlockingQueueKlassi pakub rakendamise kõigi meetodeid BlockingQueueliides.

Neid meetodeid kasutatakse massiivi blokeerimise järjekordade elementide sisestamiseks, nendele juurde pääsemiseks ja nende kustutamiseks.

Samuti tutvustame kahte meetodit put()ja take()mis toetavad blokeerimise operatsiooni massiivi blokeerimine järjekorda.

Need kaks meetodit eristavad massiivi blokeerimise järjekorda teistest tüüpilistest järjekordadest.

Sisestage elemendid

  • add()- Sisestab määratud elemendi massiivi blokeerimise järjekorda. See loob erandi, kui järjekord on täis.
  • offer()- Sisestab määratud elemendi massiivi blokeerimise järjekorda. See naaseb, falsekui järjekord on täis.

Näiteks,

 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äljund

 ArrayBlockingQueue: (koer, kass, hobune) 

Juurdepääs elementidele

  • peek()- tagastab massiivi blokeeriva järjekorra esiosa. See naaseb, nullkui järjekord on tühi.
  • iterator()- tagastab iteraatori objekti massiivide blokeerimise järjekorra elementidele järjestikku juurde pääsemiseks. See loob erandi, kui järjekord on tühi. Selle kasutamiseks peame java.util.Iteratorpakendi importima .

Näiteks,

 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äljund

 ArrayBlockingQueue: (koer, kass, hobune) juurdepääsetav element: koera arrayBlockingQueue'i elemendid: koer, kass, hobune, 

Eemalda elemendid

  • remove()- Tagastab ja eemaldab massiivi blokeerimise järjekorrast määratud elemendi. See loob erandi, kui järjekord on tühi.
  • poll()- Tagastab ja eemaldab massiivi blokeerimise järjekorrast määratud elemendi. See naaseb, nullkui järjekord on tühi.
  • clear() - Eemaldab kõik elemendid massiivi blokeerimise järjekorrast.

Näiteks,

 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äljund

 ArrayBlockingQueue: (koer, kass, hobune) eemaldatud elemendid: eemaldamise () kasutamine: koer, kes kasutab küsitlust (): kass on värskendanud ArrayBlockingQueue: () 

pane () ja võta () meetod

In multithreading protsesse, saame kasutada put()ja take()blokeerida toimimise üks niit sünkroonida teises teemas. Need meetodid ootavad, kuni neid saab edukalt käivitada.

put () meetod

Elemendi lisamiseks massiivi blokeerimise järjekorra lõppu saame kasutada put()meetodit.

Kui massiivi blokeerimise järjekord on täis, ootab see, kuni massiivi blokeerimise järjekorras on elemendi lisamiseks ruumi.

Näiteks,

 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äljund

 ArrayBlockingQueue: (koer, kass) 

Siin võib put()meetod visata, InterruptedExceptionkui see katkestatakse ootamise ajal. Seega peame selle lisama proovimise… püüdmisplokki.

võtke () meetod

Massiivi blokeerimise järjekorra esiosa tagastamiseks ja eemaldamiseks võime seda take()meetodit kasutada .

Kui massiivi blokeerimise järjekord on tühi, ootab see, kuni massiivi blokeerimise järjekorras on elemente.

Näiteks,

 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äljund

 ArrayBlockingQueue: (koer, kass) eemaldatud element: koer 

Siin take()viskab meetod meetodi, InterrupedExceptionkui see ootamise ajal katkeb. Seega peame selle sulgema try… catchploki sisse.

Muud meetodid

Meetodid Kirjeldused
contains(element) Otsib määratud elemendi massiivi blokeerimise järjekorda. Kui element leitakse, naaseb see true, kui mitte, siis naaseb false.
size() Tagastab massiivi blokeerimise järjekorra pikkuse.
toArray() Teisendab massiivi blokeerimise järjekorra massiiviks ja tagastab selle.
toString() Teisendab massiivi blokeerimise järjekorra stringiks

Miks kasutada ArrayBlockingQueue?

ArrayBlockingQueueKasutuseks massiivid oma sisemällu.

Seda peetakse niidikindla kollektsioonina. Seega kasutatakse seda tavaliselt mitme keermega rakendustes.

Oletame, et üks lõim sisestab järjekorda elemente ja teine ​​lõime eemaldab järjekorrast elemendid.

Nüüd, kui esimene lõime on aeglasem kui teine ​​lõime, võib massiivi blokeerimise järjekord panna teise lõime ootama, kuni esimene lõime oma toimingud lõpule viib.

Huvitavad Artiklid...