Java ArrayBlockingQueue

В этом руководстве мы узнаем о классе ArrayBlockingQueue и его методах с помощью примеров.

ArrayBlockingQueueКласс рамок Java Collections предусматривает реализацию блокировки очереди , используя массив.

Он реализует интерфейс Java BlockingQueue.

Создание ArrayBlockingQueue

Чтобы создать очередь блокировки массива, мы должны импортировать java.util.concurrent.ArrayBlockingQueueпакет.

После импорта пакета вот как мы можем создать очередь блокировки массива в Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Вот,

  • Тип - тип очереди блокировки массива
  • 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: 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: (Dog, Cat, Horse) Удаленные элементы: Использование remove (): Dog Использование poll (): 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если он прерывается во время ожидания. Следовательно, мы должны заключить его в блок try… catch.

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: (Dog, Cat) Удаленный элемент: Dog 

Здесь take()метод выдаст, InterrupedExceptionесли он будет прерван во время ожидания. Следовательно, мы должны заключить его в try… catchблок.

Другие методы

Методы Описания
contains(element) Ищет указанный элемент в очереди блокировки массива. Если элемент найден, он возвращается true, если нет - возвращается false.
size() Возвращает длину очереди блокировки массива.
toArray() Преобразует очередь блокировки массива в массив и возвращает его.
toString() Преобразует очередь блокировки массива в строку

Зачем использовать ArrayBlockingQueue?

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

Это считается поточно-ориентированной коллекцией. Следовательно, он обычно используется в многопоточных приложениях.

Предположим, один поток вставляет элементы в очередь, а другой поток удаляет элементы из очереди.

Теперь, если первый поток медленнее, чем второй поток, то очередь блокировки массива может заставить второй поток ждать, пока первый поток не завершит свои операции.

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