V tej vadnici bomo s pomočjo primerov spoznali razred ArrayBlockingQueue in njegove metode.
ArrayBlockingQueue
Razred okvira Java Collections omogoča izvajanje zaporne čakalne vrste z uporabo niz.
Izvaja vmesnik Java BlockingQueue.
Ustvarjanje ArrayBlockingQueue
Če želite ustvariti čakalno vrsto, ki blokira matriko, moramo uvoziti java.util.concurrent.ArrayBlockingQueue
paket.
Ko uvozimo paket, lahko v Javi ustvarimo čakalno vrsto, ki blokira matriko:
ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity);
Tukaj,
- Type - vrsta čakalne vrste, ki blokira polje
- capacity - velikost čakalne vrste, ki blokira polje
Na primer
// Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5);
Opomba: Navesti je treba velikost polja.
Metode ArrayBlockingQueue
ArrayBlockingQueue
Razred zagotavlja izvajanje vseh metod v BlockingQueue
vmesniku.
Te metode se uporabljajo za vstavljanje, dostop in brisanje elementov iz čakalnih vrst, ki blokirajo polja.
Prav tako bomo spoznali dva načina put()
in take()
to podporo, ki blokira delovanje v polje blokiranja čakalno vrsto.
Ti dve metodi ločujeta čakalno vrsto, ki blokira matriko, od drugih tipičnih čakalnih vrst.
Vstavi elemente
add()
- Vstavi navedeni element v čakalno vrsto, ki blokira matriko. Vrže izjemo, če je vrsta polna.offer()
- Vstavi navedeni element v čakalno vrsto, ki blokira polje. Vrne se,false
če je vrsta polna.
Na primer
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); ) )
Izhod
ArrayBlockingQueue: (pes, mačka, konj)
Dostop do elementov
peek()
- Vrne element s sprednje strani čakalne vrste blokade matrike. Vrne se,null
če je vrsta prazna.iterator()
- Vrne predmet iteratorja za zaporedni dostop do elementov iz čakalne vrste, ki blokira polje. Vrže izjemo, če je vrsta prazna.java.util.Iterator
Paket moramo uvoziti, da ga uporabimo.
Na primer
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(", "); ) ) )
Izhod
ArrayBlockingQueue: (Dog, Cat, Horse) Dostopni element: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse,
Odstrani elemente
remove()
- Vrne in odstrani določen element iz čakalne vrste, ki blokira matriko. Vrže izjemo, če je vrsta prazna.poll()
- Vrne in odstrani določen element iz čakalne vrste, ki blokira matriko. Vrne se,null
če je vrsta prazna.clear()
- Odstrani vse elemente iz čakalne vrste za blokiranje matrike.
Na primer
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); ) )
Izhod
ArrayBlockingQueue: (pes, mačka, konj) Odstranjeni elementi: z uporabo remove (): pes z anketo (): Cat posodobljen ArrayBlockingQueue: ()
put () in take () Metoda
V večnitnih procesih lahko uporabimo put()
in take()
blokiramo delovanje ene niti, da jo sinhroniziramo z drugo nitjo. Te metode bodo počakale, da jih bo mogoče uspešno izvesti.
metoda put ()
Če želimo element dodati na konec čakalne vrste, ki blokira polje, lahko uporabimo put()
metodo.
Če je čakalna vrsta zaporedja polna, počaka, dokler v čakalni vrsti ni na voljo prostora za dodajanje elementa.
Na primer
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); ) ) )
Izhod
ArrayBlockingQueue: (pes, mačka)
Tu lahko put()
metoda vrže an, InterruptedException
če je med čakanjem prekinjena. Zato ga moramo priložiti bloku try… catch.
metoda take ()
Za vrnitev in odstranitev elementa s sprednje strani čakalne vrste blokov polja lahko uporabimo take()
metodo.
Če je čakalna vrsta matrike prazna, počaka, da se v čakalni vrsti blokov polja izbrišejo elementi.
Na primer
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); ) ) )
Izhod
ArrayBlockingQueue: (Dog, Cat) Odstranjen element: Dog
Tu bo take()
metoda vrgla, InterrupedException
če je med čakanjem prekinjena. Zato ga moramo zapreti v try… catch
blok.
Druge metode
Metode | Opisi |
---|---|
contains(element) | Išče čakalno vrsto za blokiranje polja za navedeni element.Če je element najden, se vrne true , če ne, se vrne false . |
size() | Vrne dolžino čakalne vrste, ki blokira polje. |
toArray() | Blokira čakalno vrsto matrike v matriko in jo vrne. |
toString() | Blokira čakalno vrsto matrike v niz |
Zakaj uporabljati ArrayBlockingQueue?
V ArrayBlockingQueue
uporabe nizi njen notranji pomnilnik.
Šteje se kot zbirka, varna za nit . Zato se običajno uporablja v večnitnih aplikacijah.
Recimo, da ena nit vstavlja elemente v čakalno vrsto, druga nit pa elemente iz čakalne vrste.
Če je prva nit počasnejša od druge niti, lahko čakalna vrsta zaporedja čakal, dokler prva nit ne zaključi svojih operacij.