V tej vadnici bomo s pomočjo primerov spoznali razred LinkedBLockingQueue in njegove metode.
LinkedBlockingQueue
Razred Java Collections
okvira zagotavlja izvajanje zaporne čakalne vrste z uporabo povezani seznam.
Izvaja vmesnik Java BlockingQueue.
Ustvarjanje LinkedBlockingQueue
Če želite ustvariti povezano čakalno vrsto za blokiranje, moramo uvoziti java.util.concurrent.LinkedBlockingQueue
paket.
Evo, kako lahko v Javi ustvarimo povezano čakalno vrsto:
1. Brez začetne zmogljivosti
LinkedBlockingQueue animal = new LinkedBlockingQueue();
Tu bo privzeta začetna zmogljivost 2 31 -1.
2. Z začetno zmogljivostjo
LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity);
Tukaj,
- Tip - vrsta povezane čakalne vrste
- zmogljivost - velikost povezane čakalne vrste
Na primer
// Creating String type LinkedBlockingQueue with size 5 LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Creating Integer type LinkedBlockingQueue with size 5 LinkedBlockingQueue age = new LinkedBlockingQueue(5);
Opomba: Navedba velikosti povezanega seznama ni obvezna.
Metode LinkedBlockingQueue
LinkedBlockingQueue
Razred zagotavlja izvajanje vseh metod v vmesniku BlockingQueue.
Te metode se uporabljajo za vstavljanje, dostop in brisanje elementov iz povezanih čakalnih vrst.
Prav tako bomo spoznali dva načina put()
in take()
to podporo, ki blokira delovanje v povezanem blokiranje vrsti.
Ti dve metodi ločujeta povezano zaporo blokiranja od drugih tipičnih čakalnih vrst.
Vstavi elemente
add()
- V povezani blokirni vrsti vstavi določen element. Vrže izjemo, če je vrsta polna.offer()
- V povezani blokirni vrsti vstavi določen element. Vrne se,false
če je vrsta polna.
Na primer
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("LinkedBlockingQueue: " + animals); ) )
Izhod
LinkedBlockingQueue: (pes, mačka, konj)
Dostop do elementov
peek()
- Vrne element s sprednje strani povezane blokirne čakalne vrste. Vrne se,null
če je vrsta prazna.iterator()
- Vrne objekt iteratorja za zaporedni dostop do elementa iz povezane čakalne vrste. Vrže izjemo, če je vrsta prazna.java.util.Iterator
Paket moramo uvoziti, da ga uporabimo.
Na primer
import java.util.concurrent.LinkedBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("LinkedBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Izhod
LinkedBlockingQueue: (pes, mačka, konj) dostopni element: pes LinkedBlockingQueue elementi: pes, mačka, konj,
Odstrani elemente
remove()
- Vrne in odstrani določen element iz povezane čakalne vrste. Vrže izjemo, če je vrsta prazna.poll()
- Vrne in odstrani določen element iz povezane čakalne vrste. Vrne se,null
če je vrsta prazna.clear()
- Odstrani vse elemente iz povezane čakalne vrste.
Na primer
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals); ) )
Izhod
LinkedBlockingQueue: (Dog, Cat, Horse) Odstranjeni elementi: Uporaba remove (): Dog Uporaba ankete (): Cat posodobljena LinkedBlockingQueue: ()
metodi put () in take ()
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.
put () Metoda
Če želimo vstaviti navedeni element na konec povezane čakalne vrste, uporabimo put()
metodo.
Če je povezana čakalna vrsta blokirana, počaka, dokler v povezani čakalni vrsti ni prostora za vstavljanje elementa.
Na primer
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) )
Izhod
LinkedBlockingQueue: (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 povezane čakalne vrste lahko uporabimo take()
metodo.
Če je povezana čakalna vrsta blokirana, počaka, da se v povezani čakalni vrsti blokirajo elementi, ki jih je treba izbrisati.
Na primer
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); System.out.println("New LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) )
Izhod
LinkedBlockingQueue: (Dog, Cat) Odstranjen element: Dog New LinkedBlockingQueue: (Cat)
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 povezano zaporo blokiranja za navedeni element. Če je element najden, se vrne true , če ne, se vrne false . |
size() | Vrne dolžino povezane čakalne vrste. |
toArray() | Pretvorjeno čakalno vrsto blokira v matriko in vrne matriko. |
toString() | Pretvorjeno čakalno vrsto blokiranja pretvori v niz |
Zakaj uporabljati LinkedBlockingQueue?
V LinkedBlockingQueue
uporabe povezana seznamov svojem notranjem pomnilniku.
Š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 povezana čakalna vrsta povzroči, da druga nit počaka, dokler prva nit ne zaključi svojih operacij.