Šioje pamokoje pavyzdžių pagalba sužinosime apie „ArrayBlockingQueue“ klasę ir jos metodus.
„ ArrayBlockingQueue
Java 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.ArrayBlockingQueue
paketą.
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
ArrayBlockingQueue
Klasė suteikia visų į metodų įgyvendinimą BlockingQueue
są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,false
jei 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,null
jei 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 importuotijava.util.Iterator
paketą, 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,null
jei 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, 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š 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, 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 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“?
Į ArrayBlockingQueue
naudoja 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.