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








