Šioje pamokoje pavyzdžių pagalba sužinosime apie „LinkedBLockingQueue“ klasę ir jos metodus.
„ LinkedBlockingQueue
Java“ Collections
struktūros klasė suteikia blokavimo eilės įgyvendinimą naudojant susietą sąrašą.
Jis įdiegia „Java BlockingQueue“ sąsają.
Kuriama „LinkedBlockingQueue“
Norėdami sukurti susietą blokavimo eilę, turime importuoti java.util.concurrent.LinkedBlockingQueue
paketą.
Štai kaip galime sukurti susietą blokavimo eilę „Java“:
1. Be pradinio pajėgumo
LinkedBlockingQueue animal = new LinkedBlockingQueue();
Čia numatytasis pradinis pajėgumas bus 2 31 -1.
2. Su pradiniu pajėgumu
LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity);
Čia
- Tipas - susietos blokavimo eilės tipas
- talpa - susietos blokavimo eilės dydis
Pavyzdžiui,
// Creating String type LinkedBlockingQueue with size 5 LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Creating Integer type LinkedBlockingQueue with size 5 LinkedBlockingQueue age = new LinkedBlockingQueue(5);
Pastaba: neprivaloma nurodyti susieto sąrašo dydžio.
„LinkedBlockingQueue“ metodai
LinkedBlockingQueue
Klasė suteikia visų į BlockingQueue sąsaja metodų įgyvendinimą.
Šie metodai naudojami įterpiant, pasiekiant ir ištrinant elementus iš susietų blokavimo eilių.
Taip pat sužinosime apie du metodus put()
, take()
kurie palaiko blokavimo operaciją susietoje blokavimo eilėje.
Šie du metodai atskiria susietą blokavimo eilę nuo kitų tipiškų eilių.
Įterpti elementus
add()
- Įterpia nurodytą elementą į susietą blokavimo eilę. Tai išimtis, jei eilė pilna.offer()
- Įterpia nurodytą elementą į susietą blokavimo eilę. Jis grįžta,false
jei eilė pilna.
Pavyzdžiui,
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); ) )
Rezultatas
„LinkedBlockingQueue“: (šuo, katė, arklys)
Prieigos elementai
peek()
- Grąžina elementą iš susietos blokavimo eilės priekio. Jis grįžta,null
jei eilė tuščia.iterator()
- grąžina iteratoriaus objektą nuosekliai pasiekti elementą iš susietos blokavimo eilės. Tai reiškia išimtį, jei eilė tuščia. Turime importuotijava.util.Iterator
paketą, kad galėtume jį naudoti.
Pavyzdžiui,
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(", "); ) ) )
Rezultatas
„LinkedBlockingQueue“: (šuo, katė, arklys) prieinamas elementas: šuo „LinkedBlockingQueue“ elementai: šuo, katė, arklys,
Pašalinti elementus
remove()
- Grąžina ir pašalina nurodytą elementą iš susietos blokavimo eilės. Tai išimtis, jei eilė tuščia.poll()
- Grąžina ir pašalina nurodytą elementą iš susietos blokavimo eilės. Jis grįžta,null
jei eilė tuščia.clear()
- Pašalina visus elementus iš susietos blokavimo eilės.
Pavyzdžiui,
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); ) )
Rezultatas
„LinkedBlockingQueue“: (šuo, katė, arklys) pašalinti elementai: naudojant pašalinti (): šuo naudojant apklausą (): katė atnaujinta „LinkedBlockingQueue“: ()
put () ir take () metodai
Vykdydami daugialypius gijimo procesus, galime naudoti put()
ir take()
blokuoti vienos gijos veikimą, kad sinchronizuotume ją su kita gija. Šie metodai lauks, kol juos bus galima sėkmingai įgyvendinti.
put () metodas
Norėdami įterpti nurodytą elementą į susietos blokavimo eilės pabaigą, naudojame put()
metodą.
Jei susieta blokavimo eilė pilna, ji laukia, kol susietoje blokavimo eilėje bus vietos elementui įterpti.
Pavyzdžiui,
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); ) ) )
Rezultatas
„LinkedBlockingQueue“: (šuo, katė)
Čia put()
metodas gali išmesti, InterruptedException
jei jis bus pertrauktas laukiant. Taigi, mes turime jį įtraukti į „try… catch block“.
take () metodas
Norėdami grąžinti ir pašalinti elementą iš susietos blokavimo eilės priekio, galime naudoti take()
metodą.
Jei susieta blokavimo eilė tuščia, ji laukia, kol susietoje blokavimo eilėje bus elementų.
Pavyzdžiui,
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); ) ) )
Rezultatas
„LinkedBlockingQueue“: (šuo, katė) pašalintas elementas: šuo naujas „LinkedBlockingQueue“: (katė)
Čia take()
metodas meta, InterrupedException
jei jis bus pertrauktas laukiant. Taigi, mes turime jį uždaryti į try… catch
bloką.
Kiti metodai
Metodai | Aprašymai |
---|---|
contains(element) | Ieško nurodyto elemento susietoje blokavimo eilėje. Jei elementas yra rastas, jis grįžta true , jei ne, jis grįžta false . |
size() | Grąžina susietos blokavimo eilės ilgį. |
toArray() | Konvertuoja susietą blokavimo eilę į masyvą ir grąžina masyvą. |
toString() | Konvertuoja susietą blokavimo eilę į eilutę |
Kodėl verta naudoti „LinkedBlockingQueue“?
Į LinkedBlockingQueue
naudojimas susijęs sąrašus kaip savo vidinę atmintį.
Tai laikoma saugiu siūlais kolekcija. Taigi, jis paprastai naudojamas daugialypėms siūlėms.
Tarkime, viena gija įterpia elementus į eilę, o kita gija pašalina elementus iš eilės.
Dabar, jei pirmoji gija yra lėtesnė nei antroji gija, susieta blokavimo eilė gali priversti antrąją giją laukti, kol pirmoji gija užbaigs savo operacijas.