„Java ArrayBlockingQueue“

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

ArrayBlockingQueueJava Collections“ struktūros klasė suteikia blokavimo eilės įgyvendinimą naudojant masyvą.

Jis įdiegia „Java BlockingQueue“ sąsają.

Kuriama „ArrayBlockingQueue“

Norėdami sukurti masyvų blokavimo eilę, turime importuoti java.util.concurrent.ArrayBlockingQueuepaketą.

Kai importuosime paketą, štai kaip galime sukurti „Java“ masyvų blokavimo eilę:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Čia

  • Tipas - masyvų blokavimo eilės tipas
  • talpa - masyvų blokavimo eilės dydis

Pavyzdžiui,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

Pastaba: privaloma nurodyti masyvo dydį.

„ArrayBlockingQueue“ metodai

ArrayBlockingQueueKlasė suteikia visų į metodų įgyvendinimą BlockingQueuesąsaja.

Šie metodai naudojami įterpti, pasiekti ir ištrinti elementus iš masyvų blokavimo eilių.

Taip pat sužinosime apie du metodus put(), take()kurie palaiko blokavimo operaciją masyvo blokavimo eilėje.

Šie du metodai atskiria masyvų blokavimo eilę nuo kitų tipiškų eilių.

Įterpti elementus

  • add()- Įterpia nurodytą elementą į masyvų blokavimo eilę. Tai išimtis, jei eilė pilna.
  • offer()- Įterpia nurodytą elementą į masyvų blokavimo eilę. Jis grįžta, falsejei eilė pilna.

Pavyzdžiui,

 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); ) ) 

Rezultatas

 „ArrayBlockingQueue“: (šuo, katė, arklys) 

Prieigos elementai

  • peek()- Grąžina elementą iš masyvo blokavimo eilės priekio. Jis grįžta, nulljei eilė tuščia.
  • iterator()- grąžina iteratoriaus objektą nuosekliai pasiekti elementus iš masyvo 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.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(", "); ) ) ) 

Rezultatas

 „ArrayBlockingQueue“: (šuo, katė, arklys) prieinamas elementas: „Dog ArrayBlockingQueue“ elementai: šuo, katė, arklys, 

Pašalinti elementus

  • remove()- Grąžina ir pašalina nurodytą elementą iš masyvų blokavimo eilės. Tai išimtis, jei eilė tuščia.
  • poll()- Grąžina ir pašalina nurodytą elementą iš masyvų blokavimo eilės. Jis grįžta, nulljei eilė tuščia.
  • clear() - Pašalina visus elementus iš masyvų blokavimo eilės.

Pavyzdžiui,

 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); ) ) 

Rezultatas

 „ArrayBlockingQueue“: (šuo, katė, arklys) Pašalinti elementai: Naudojant pašalinti (): Šuo naudojant apklausą (): Katė atnaujino „ArrayBlockingQueue“: () 

put () ir take () metodas

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 pridėti elementą į masyvų blokavimo eilės pabaigą, galime naudoti put()metodą.

Jei masyvų blokavimo eilė yra pilna, ji laukia, kol masyvų blokavimo eilėje bus vietos pridėti elementą.

Pavyzdžiui,

 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); ) ) ) 

Rezultatas

 „ArrayBlockingQueue“: (š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š masyvų blokavimo eilės priekio, galime naudoti take()metodą.

Jei masyvo blokavimo eilė yra tuščia, ji laukia, kol masyvo blokavimo eilėje bus ištrinti elementai.

Pavyzdžiui,

 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); ) ) ) 

Rezultatas

 „ArrayBlockingQueue“: (šuo, katė) pašalintas elementas: šuo 

Č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 masyvo blokavimo eilėje. Jei elementas rastas, jis grįžta true, jei ne, jis grįžta false.
size() Grąžina masyvo blokavimo eilės ilgį.
toArray() Konvertuoja masyvo blokavimo eilę į masyvą ir grąžina ją.
toString() Masyvo blokavimo eilę paverčia eilute

Kodėl verta naudoti „ArrayBlockingQueue“?

Į ArrayBlockingQueuenaudoja masyvų 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 pirmasis siūlas yra lėtesnis nei antrasis, masyvo blokavimo eilė gali priversti antrąją giją laukti, kol pirmoji gija užbaigs savo operacijas.

Įdomios straipsniai...