U ovom uputstvu uz primjere ćemo naučiti o klasi ArrayBlockingQueue i njezinim metodama.
ArrayBlockingQueue
Klasa okviru Java Zbirke pruža blokira provođenje reda pomoću polja.
Provodi sučelje Java BlockingQueue.
Stvaranje ArrayBlockingQueue
Da bismo stvorili red za blokiranje niza, moramo uvesti java.util.concurrent.ArrayBlockingQueue
paket.
Nakon što uvozimo paket, evo kako možemo stvoriti red za blokiranje nizova u Javi:
ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity);
Ovdje,
- Tip - vrsta reda za blokiranje niza
- kapacitet - veličina reda za blokiranje niza
Na primjer,
// Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5);
Napomena: Obavezno je navesti veličinu polja.
Metode ArrayBlockingQueue
ArrayBlockingQueue
Klasa osigurava provedbu svih metoda u BlockingQueue
sučelju.
Te se metode koriste za umetanje, pristup i brisanje elemenata iz redova koji blokiraju nizove.
Također, naučit ćemo o dvije metode put()
i take()
koje podržavaju operaciju blokiranja u redu blokiranja niza.
Ove dvije metode razlikuju red za blokiranje niza od ostalih tipičnih redova.
Umetni elemente
add()
- Ubacuje navedeni element u red za blokiranje niza. Dobavlja iznimku ako je red pun.offer()
- Ubacuje navedeni element u red za blokiranje niza. Vraća sefalse
ako je red pun.
Na primjer,
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); ) )
Izlaz
ArrayBlockingQueue: (pas, mačka, konj)
Pristup elementima
peek()
- Vraća element s prednje strane reda za blokiranje niza. Vraća senull
ako je red prazan.iterator()
- Vraća objekt iteratora za sekvencijalni pristup elementima iz reda za blokiranje niza. Dobavlja iznimku ako je red prazan. Moramo uvestijava.util.Iterator
paket da bismo ga koristili.
Na primjer,
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(", "); ) ) )
Izlaz
ArrayBlockingQueue: (Pas, Mačka, Konj) Pristupljeni element: Pas ArrayBlockingQueue Elementi: Pas, Mačka, Konj,
Uklonite elemente
remove()
- Vraća i uklanja navedeni element iz reda za blokiranje niza. Dobavlja iznimku ako je red prazan.poll()
- Vraća i uklanja navedeni element iz reda za blokiranje niza. Vraća senull
ako je red prazan.clear()
- Uklanja sve elemente iz reda za blokiranje niza.
Na primjer,
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); ) )
Izlaz
ArrayBlockingQueue: (Pas, Mačka, Konj) Uklonjeni elementi: Korištenje remove (): Pas Korištenje ankete (): Mačka Ažuriran ArrayBlockingQueue: ()
put () i take () Metoda
U postupcima s više niti možemo koristiti put()
i take()
za blokiranje rada jedne niti da bismo je sinkronizirali s drugom niti. Ove će metode pričekati dok se ne mogu uspješno izvršiti.
put () metoda
Da bismo dodali element na kraj reda za blokiranje niza, možemo koristiti put()
metodu.
Ako je red za blokiranje niza pun, čeka se dok u redu za blokiranje niza nema mjesta za dodavanje elementa.
Na primjer,
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); ) ) )
Izlaz
ArrayBlockingQueue: (pas, mačka)
Ovdje put()
metoda može baciti InterruptedException
ako se prekine dok se čeka. Stoga ga moramo priložiti unutar bloka try… catch.
take () metoda
Da bismo vratili i uklonili element s prednje strane reda za blokiranje niza, možemo koristiti take()
metodu.
Ako je red za blokiranje niza prazan, čeka se dok se u redu za blokiranje niza ne uklone elementi.
Na primjer,
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); ) ) )
Izlaz
ArrayBlockingQueue: (Pas, Mačka) Uklonjeni element: Pas
Ovdje će take()
metoda baciti znak InterrupedException
if ako je prekinut dok se čeka. Stoga ga moramo zatvoriti u try… catch
blok.
Ostale metode
Metode | Opisi |
---|---|
contains(element) | Pretražuje red blokiranja niza za navedeni element. Ako je element pronađen, on se vraća true , ako ne, vraća se false . |
size() | Vraća duljinu reda za blokiranje niza. |
toArray() | Pretvara red za blokiranje niza u niz i vraća ga. |
toString() | Pretvara red za blokiranje niza u niz |
Zašto koristiti ArrayBlockingQueue?
Na ArrayBlockingQueue
koristi nizovi kao svoju internu pohranu.
Smatra se kolekcijom sigurnom u nitima . Stoga se obično koristi u aplikacijama s više niti.
Pretpostavimo da jedna nit ubacuje elemente u red, a druga nit uklanja elemente iz reda.
Sada, ako je prva nit sporija od druge niti, tada red za blokiranje niza može natjerati drugu nit da čeka dok prva nit ne dovrši svoje operacije.