Java ArrayBlockingQueue

U ovom uputstvu uz primjere ćemo naučiti o klasi ArrayBlockingQueue i njezinim metodama.

ArrayBlockingQueueKlasa 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.ArrayBlockingQueuepaket.

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

ArrayBlockingQueueKlasa osigurava provedbu svih metoda u BlockingQueuesuč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 se falseako 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 se nullako je red prazan.
  • iterator()- Vraća objekt iteratora za sekvencijalni pristup elementima iz reda za blokiranje niza. Dobavlja iznimku ako je red prazan. Moramo uvesti java.util.Iteratorpaket 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 se nullako 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 InterruptedExceptionako 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 InterrupedExceptionif ako je prekinut dok se čeka. Stoga ga moramo zatvoriti u try… catchblok.

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 ArrayBlockingQueuekoristi 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.

Zanimljivi članci...