„Java LinkedBlockingQueue“

Šioje pamokoje pavyzdžių pagalba sužinosime apie „LinkedBLockingQueue“ klasę ir jos metodus.

LinkedBlockingQueueJava“ Collectionsstruktū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.LinkedBlockingQueuepaketą.

Š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

LinkedBlockingQueueKlasė 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, falsejei 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, nulljei 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 importuoti java.util.Iteratorpaketą, 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, nulljei 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, InterruptedExceptionjei 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, InterrupedExceptionjei jis bus pertrauktas laukiant. Taigi, mes turime jį uždaryti į try… catchbloką.

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“?

Į LinkedBlockingQueuenaudojimas 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.

Įdomios straipsniai...