В этом руководстве мы узнаем о классе 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качестве внутреннего хранилища использует массивы.
Это считается поточно-ориентированной коллекцией. Следовательно, он обычно используется в многопоточных приложениях.
Предположим, один поток вставляет элементы в очередь, а другой поток удаляет элементы из очереди.
Теперь, если первый поток медленнее, чем второй поток, то очередь блокировки массива может заставить второй поток ждать, пока первый поток не завершит свои операции.








