Java LinkedBlockingQueue

V tej vadnici bomo s pomočjo primerov spoznali razred LinkedBLockingQueue in njegove metode.

LinkedBlockingQueueRazred Java Collectionsokvira 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.LinkedBlockingQueuepaket.

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

LinkedBlockingQueueRazred 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.IteratorPaket 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… catchblok.

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

Zanimive Članki...