Selles õpetuses õpime näidete abil klassi ArrayBlockingQueue ja selle meetodeid.
ArrayBlockingQueue
Klassi 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.ArrayBlockingQueue
paketi 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
ArrayBlockingQueue
Klassi pakub rakendamise kõigi meetodeid BlockingQueue
liides.
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,false
kui 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,null
kui 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.Iterator
pakendi 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,null
kui 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, InterruptedException
kui 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, InterrupedException
kui see ootamise ajal katkeb. Seega peame selle sulgema try… catch
ploki 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?
ArrayBlockingQueue
Kasutuseks 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.