Java ArrayBlockingQueue

В този урок ще научим за класа ArrayBlockingQueue и неговите методи с помощта на примери.

В ArrayBlockingQueueкласа на рамката на Java Колекции предвижда блокиране на изпълнението на нея чрез масив.

Той реализира интерфейса Java BlockingQueue.

Създаване на ArrayBlockingQueue

За да създадем опашка за блокиране на масив, трябва да импортираме java.util.concurrent.ArrayBlockingQueueпакета.

След като импортираме пакета, ето как можем да създадем опашка за блокиране на масив в Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Тук,

  • Тип - типът на опашката за блокиране на масива
  • капацитет - размерът на опашката за блокиране на масива

Например,

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

Забележка: Задължително е да се предостави размерът на масива.

Методи на ArrayBlockingQueue

В ArrayBlockingQueueклас осигурява изпълнението на всички методи на BlockingQueueинтерфейса.

Тези методи се използват за вмъкване, достъп и изтриване на елементи от опашки, блокиращи масиви.

Също така ще научим за два метода put()и take()които поддържат операцията за блокиране в опашката за блокиране на масива.

Тези два метода разграничават опашката за блокиране на масив от другите типични опашки.

Вмъкване на елементи

  • add()- Вмъква посочения елемент в опашката за блокиране на масива. Изхвърля изключение, ако опашката е пълна.
  • offer()- Вмъква посочения елемент в опашката за блокиране на масива. Той се връща, falseако опашката е пълна.

Например,

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

Изход

 ArrayBlockingQueue: (куче, котка, кон) 

Елементи за достъп

  • peek()- Връща елемент от предната страна на опашката за блокиране на масива. Връща се, nullако опашката е празна.
  • iterator()- Връща обект на итератор за последователен достъп до елементи от опашката за блокиране на масива. Изхвърля изключение, ако опашката е празна. Трябва да импортираме java.util.Iteratorпакета, за да го използваме.

Например,

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

Изход

 ArrayBlockingQueue: (Dog, Cat, Horse) Достъпен елемент: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse, 

Премахване на елементи

  • remove()- Връща и премахва определен елемент от опашката за блокиране на масива. Изхвърля изключение, ако опашката е празна.
  • poll()- Връща и премахва определен елемент от опашката за блокиране на масива. Връща се, nullако опашката е празна.
  • clear() - Премахва всички елементи от опашката за блокиране на масива.

Например,

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

Изход

 ArrayBlockingQueue: (Куче, Котка, Кон) Премахнати елементи: Използване на remove (): Куче Използване на анкета (): Cat Актуализиран ArrayBlockingQueue: () 

put () и take () Метод

В многонишковите процеси можем да използваме put()и take()да блокираме работата на една нишка, за да я синхронизираме с друга нишка. Тези методи ще изчакат, докато могат да бъдат успешно изпълнени.

метод put ()

За да добавим елемент в края на опашката за блокиране на масив, можем да използваме put()метода.

Ако опашката за блокиране на масива е пълна, тя чака, докато в опашката за блокиране на масива има място, за да добави елемент.

Например,

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

Изход

 ArrayBlockingQueue: (куче, котка) 

Тук put()методът може да хвърли, InterruptedExceptionако е прекъснат, докато чакате. Следователно трябва да го приложим в блок за опити … улов.

take () Метод

За да върнем и премахнем елемент от предната страна на опашката за блокиране на масива, можем да използваме take()метода.

Ако опашката за блокиране на масив е празна, тя чака, докато в опашката за блокиране на масива има елементи, които да бъдат изтрити.

Например,

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

Изход

 ArrayBlockingQueue: (Куче, Котка) Премахнат елемент: Куче 

Тук take()методът ще хвърли, InterrupedExceptionако е прекъснат, докато чакате. Следователно трябва да го затворим в try… catchблок.

Други методи

Методи Описания
contains(element) Търси опашката за блокиране на масив за посочения елемент. Ако елементът бъде намерен, той се връща true, ако не се връща false.
size() Връща дължината на опашката за блокиране на масива.
toArray() Преобразува опашката за блокиране на масив в масив и го връща.
toString() Преобразува опашката за блокиране на масив в низ

Защо да използвам ArrayBlockingQueue?

На ArrayBlockingQueueупотреби масиви нейната вътрешна памет.

Счита се за безопасно събиране на конци . Следователно, той обикновено се използва в многопоточни приложения.

Да предположим, че една нишка вмъква елементи в опашката, а друга нишка премахва елементи от опашката.

Сега, ако първата нишка е по-бавна от втората нишка, тогава опашката за блокиране на масива може да накара втората нишка да чака, докато първата нишка завърши своите операции.

Интересни статии...