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