Java ArrayBlockingQueue

W tym samouczku dowiemy się o klasie ArrayBlockingQueue i jej metodach na przykładach.

ArrayBlockingQueueKlasa ramach kolekcje Java zapewnia realizację blokowania kolejki po tablicy.

Implementuje interfejs Java BlockingQueue.

Tworzenie ArrayBlockingQueue

Aby utworzyć kolejkę blokującą tablice, musimy zaimportować java.util.concurrent.ArrayBlockingQueuepakiet.

Po zaimportowaniu pakietu, oto jak możemy utworzyć kolejkę blokującą tablice w Javie:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Tutaj,

  • Typ - typ kolejki blokującej tablicę
  • pojemność - rozmiar kolejki blokującej tablicę

Na przykład,

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

Uwaga: Podanie rozmiaru tablicy jest obowiązkowe.

Metody ArrayBlockingQueue

ArrayBlockingQueueKlasa zapewnia realizację wszystkich metod w BlockingQueueinterfejsie.

Te metody służą do wstawiania, uzyskiwania dostępu i usuwania elementów z kolejek blokujących tablice.

Dowiemy się również o dwóch metodach put()i take()obsługujących operację blokowania w kolejce blokowania tablicy.

Te dwie metody odróżniają kolejkę blokującą tablicę od innych typowych kolejek.

Wstaw elementy

  • add()- Wstawia określony element do kolejki blokowania tablicy. Zgłasza wyjątek, jeśli kolejka jest pełna.
  • offer()- Wstawia określony element do kolejki blokowania tablicy. Zwraca, falsejeśli kolejka jest pełna.

Na przykład,

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

Wynik

 ArrayBlockingQueue: (Pies, Kot, Koń) 

Access Elements

  • peek()- Zwraca element z początku kolejki blokującej tablicę. Zwraca, nulljeśli kolejka jest pusta.
  • iterator()- Zwraca obiekt iteratora w celu sekwencyjnego dostępu do elementów z kolejki blokującej tablicę. Zgłasza wyjątek, jeśli kolejka jest pusta. Aby java.util.Iteratorgo użyć, musimy zaimportować pakiet.

Na przykład,

 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(", "); ) ) ) 

Wynik

 ArrayBlockingQueue: (pies, kot, koń) Dostępny element: pies ArrayBlocking Elementy kolejki: pies, kot, koń, 

Usuń elementy

  • remove()- Zwraca i usuwa określony element z kolejki blokowania tablicy. Zgłasza wyjątek, jeśli kolejka jest pusta.
  • poll()- Zwraca i usuwa określony element z kolejki blokowania tablicy. Zwraca, nulljeśli kolejka jest pusta.
  • clear() - Usuwa wszystkie elementy z kolejki blokowania tablicy.

Na przykład,

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

Wynik

 ArrayBlockingQueue: (Pies, Kot, Koń) Usunięte elementy: Używanie remove (): Dog Używanie poll (): Cat Zaktualizowano ArrayBlockingQueue: () 

metoda put () i take ()

W procesach wielowątkowych możemy używać put()i take()blokować działanie jednego wątku, aby zsynchronizować go z innym wątkiem. Te metody będą czekać, aż zostaną pomyślnie wykonane.

put (), metoda

Aby dodać element na koniec kolejki blokującej tablicę, możemy użyć put()metody.

Jeśli kolejka blokująca tablicę jest pełna, czeka, aż w kolejce blokującej tablicę będzie miejsce na dodanie elementu.

Na przykład,

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

Wynik

 ArrayBlockingQueue: (Pies, Kot) 

W tym przypadku put()metoda może zgłosić błąd, InterruptedExceptionjeśli zostanie przerwana podczas oczekiwania. Dlatego musimy zamknąć go w bloku try… catch.

take () Metoda

Aby zwrócić i usunąć element z przodu kolejki blokującej tablicę, możemy użyć take()metody.

Jeśli kolejka blokująca tablicę jest pusta, czeka, aż w kolejce blokującej tablicę znajdą się elementy do usunięcia.

Na przykład,

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

Wynik

 ArrayBlockingQueue: (Pies, Kot) Usunięty element: Pies 

W tym przypadku take()metoda wyrzuci, InterrupedExceptionjeśli zostanie przerwana podczas oczekiwania. Dlatego musimy zamknąć go w try… catchbloku.

Inne metody

Metody Opisy
contains(element) Przeszukuje kolejkę blokującą tablicę pod kątem określonego elementu. Jeśli element zostanie znaleziony, zwraca true, jeśli nie, zwraca false.
size() Zwraca długość kolejki blokującej tablicę.
toArray() Konwertuje kolejkę blokującą tablicę na tablicę i zwraca ją.
toString() Konwertuje kolejkę blokującą tablicę na ciąg

Dlaczego warto korzystać z ArrayBlockingQueue?

Do ArrayBlockingQueuezastosowania jako tablicami pamięci wewnętrznej.

Jest uważana za kolekcję bezpieczną dla wątków . W związku z tym jest powszechnie używany w aplikacjach wielowątkowych.

Załóżmy, że jeden wątek wstawia elementy do kolejki, a inny wątek usuwa elementy z kolejki.

Teraz, jeśli pierwszy wątek jest wolniejszy niż drugi wątek, kolejka blokująca tablicę może sprawić, że drugi wątek będzie czekał, aż pierwszy wątek zakończy swoje operacje.

Interesujące artykuły...