Java ArrayBlockingQueue

У цьому посібнику ми дізнаємося про клас ArrayBlockingQueue та його методи за допомогою прикладів.

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

Він реалізує інтерфейс 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: (Собака, Кіт, Кінь) Видалені елементи: Використання видалення (): Собака за допомогою опитування (): Кішка оновлена ​​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використовує масиви в якості внутрішньої пам'яті.

Він розглядається як колекція, що захищає нитки . Отже, він зазвичай використовується в багатопоточних програмах.

Припустимо, один потік вставляє елементи в чергу, а інший потік видаляє елементи з черги.

Тепер, якщо перший потік повільніший за другий потік, то черга блокування масиву може змусити другий потік чекати, поки перший потік не завершить свої операції.

Цікаві статті...