Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java ArrayBlockingQueue: продвинутое руководство по блокирующим очередям и потокобезопасным операциям

Java ArrayBlockingQueue

Изучите Java ArrayBlockingQueue — узнайте, как создавать, манипулировать и потокобезопасно использовать эту очередь фиксированного размера с чёткими примерами.

Класс ArrayBlockingQueue в Java Collections Framework предоставляет ограниченную, потокобезопасную очередь, основанную на массиве. Он реализует интерфейс BlockingQueue, позволяя производителям и потребителям координироваться через блокирующие операции.


Создание ArrayBlockingQueue

Импортируйте java.util.concurrent.ArrayBlockingQueue и создайте экземпляр с фиксированной ёмкостью:

ArrayBlockingQueue<Type> queue = new ArrayBlockingQueue<>(capacity);

Где Type — тип элементов, а capacity — максимальный размер.

Примечание: Ёмкость обязательна; она определяет ограниченный размер очереди.


Основные методы ArrayBlockingQueue

Класс реализует все методы из BlockingQueue для вставки, доступа и удаления элементов. Ниже приведены наиболее часто используемые операции.

Вставка элементов

ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
animals.add("Dog");
animals.offer("Cat");
animals.offer("Horse");
System.out.println("ArrayBlockingQueue: " + animals);

Вывод: ArrayBlockingQueue: [Dog, Cat, Horse]

Доступ к элементам

String head = animals.peek();
System.out.println("Head element: " + head);
Iterator<String> it = animals.iterator();
while (it.hasNext()) {
    System.out.print(it.next() + ", ");
}

Вывод: Head element: Dog за которым следует список элементов.

Удаление элементов

String removed1 = animals.remove();
String removed2 = animals.poll();
animals.clear();
System.out.println("Updated queue: " + animals);

Вывод: Updated queue: []


Блокирующие операции: put() и take()

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

put()

Вставляет элемент, ожидая, если очередь полна. Может выбросить InterruptedException.

try {
    animals.put("Dog");
    animals.put("Cat");
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

take()

Удаляет и возвращает голову, ожидая, если очередь пуста. Может выбросить InterruptedException.

try {
    String element = animals.take();
    System.out.println("Removed: " + element);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

Дополнительные удобные методы

МетодОписание
contains(Object o)Возвращает true, если очередь содержит указанный элемент.
size()Возвращает текущее количество элементов.
toArray()Преобразует очередь в массив.
toString()Строковое представление очереди.

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

Потому что он предлагает:

Когда один поток производит медленнее, чем потребляет потребитель, потребитель автоматически блокируется, избегая занятого ожидания и обеспечивая эффективное использование CPU.

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Понимание Java Vector: использование, особенности и сравнение с ArrayList