Spec-Zone.ru › OpenJDK 25

Класс ArrayBlockingQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.ArrayBlockingQueue<E>
Параметры типа:
E — тип элементов, хранящихся в этой очереди
Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
Ограниченная блокирующая очередь на основе массива. Эта очередь упорядочивает элементы по принципу FIFO (первым пришёл — первым вышел). Голова очереди — это элемент, который находится в очереди дольше всего. Хвост очереди — это элемент, который находится в очереди меньше всего времени. Новые элементы вставляются в хвост очереди, а операции извлечения из очереди получают элементы из её головы.

Это классический «буфер ограниченного размера», в котором массив фиксированного размера хранит элементы, добавляемые производителями и извлекаемые потребителями. После создания ёмкость изменить нельзя. Попытка put элемент в заполненную очередь приведёт к блокировке операции; попытка take элемент из пустой очереди также приведёт к блокировке.

Этот класс поддерживает необязательную политику справедливости для упорядочения потоков производителей и потребителей, ожидающих доступа. По умолчанию такой порядок не гарантируется. Однако очередь, созданная с параметром справедливости, равным true, предоставляет потокам доступ в порядке FIFO. Справедливость обычно снижает пропускную способность, но уменьшает вариативность и предотвращает голодание.

Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.

Этот класс является частью Java Collections Framework.

Начиная с версии:
1.5
См. также:
  • Сериализованная форма

Краткое описание конструкторов

Конструктор Описание
ArrayBlockingQueue(int capacity)
Создаёт ArrayBlockingQueue с заданной (фиксированной) ёмкостью и политикой доступа по умолчанию.
ArrayBlockingQueue(int capacity, boolean fair)
Создаёт ArrayBlockingQueue с заданной (фиксированной) ёмкостью и указанной политикой доступа.
ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
Создаёт ArrayBlockingQueue с заданной (фиксированной) ёмкостью и указанной политикой доступа; изначально очередь содержит элементы заданной коллекции, добавленные в порядке обхода её итератора.

Краткое описание методов

Модификатор и тип Метод Описание
boolean add(E e)
Вставляет указанный элемент в хвост этой очереди, если это можно сделать немедленно, не превышая её ёмкость; при успехе возвращает true, а если очередь заполнена, выбрасывает IllegalStateException.
void clear()
Атомарно удаляет из этой очереди все элементы.
boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент.
int drainTo(Collection<? super E> c)
Удаляет все доступные элементы из этой очереди и добавляет их в указанную коллекцию.
int drainTo(Collection<? super E> c, int maxElements)
Удаляет из этой очереди не более указанного числа доступных элементов и добавляет их в указанную коллекцию.
void forEach(Consumer<? super E> action)
Выполняет указанное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение.
Iterator<E> iterator()
Возвращает итератор по элементам этой очереди в надлежащем порядке.
boolean offer(E e)
Вставляет указанный элемент в хвост этой очереди, если это можно сделать немедленно, не превышая её ёмкость; при успехе возвращает true, а если очередь заполнена — false.
boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в хвост этой очереди, ожидая освобождения места в течение указанного времени, если очередь заполнена.
E peek()
Получает, но не удаляет голову этой очереди; если очередь пуста, возвращает null.
E poll()
Получает и удаляет голову этой очереди; если очередь пуста, возвращает null.
E poll(long timeout, TimeUnit unit)
Получает и удаляет голову этой очереди, при необходимости ожидая появления элемента в течение указанного времени.
void put(E e)
Вставляет указанный элемент в хвост этой очереди, ожидая освобождения места, если очередь заполнена.
int remainingCapacity()
Возвращает число дополнительных элементов, которые эта очередь в идеальных условиях (при отсутствии ограничений памяти или ресурсов) может принять без блокировки.
boolean remove(Object o)
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует.
boolean removeAll(Collection<?> c)
Удаляет из этой коллекции все элементы, которые также содержатся в указанной коллекции (необязательная операция).
boolean removeIf(Predicate<? super E> filter)
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция).
boolean retainAll(Collection<?> c)
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция).
int size()
Возвращает число элементов в этой очереди.
Spliterator<E> spliterator()
Возвращает Spliterator для элементов этой очереди.
E take()
Получает и удаляет голову этой очереди, при необходимости ожидая появления элемента.
Object[] toArray()
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке; тип возвращённого массива во время выполнения совпадает с типом указанного массива.

Методы, объявленные в классе AbstractQueue

addAll, element, remove

Методы, объявленные в классе AbstractCollection

containsAll, isEmpty, toString

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе Collection

addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray

Методы, объявленные в интерфейсе Queue

element, remove

Подробное описание конструкторов

ArrayBlockingQueue

public ArrayBlockingQueue(int capacity)
Создает ArrayBlockingQueue с заданной (фиксированной) вместимостью и политикой доступа по умолчанию.
Параметры:
capacity — вместимость этой очереди
Исключения:
IllegalArgumentException — если capacity < 1

ArrayBlockingQueue

public ArrayBlockingQueue(int capacity, boolean fair)
Создает ArrayBlockingQueue с заданной (фиксированной) вместимостью и указанной политикой доступа.
Параметры:
capacity — вместимость этой очереди
fair — если true, доступ к очереди потоков, заблокированных при добавлении или удалении элементов, обрабатывается в порядке FIFO; если false, порядок доступа не определен.
Исключения:
IllegalArgumentException — если capacity < 1

ArrayBlockingQueue

public ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
Создает ArrayBlockingQueue с заданной (фиксированной) вместимостью и указанной политикой доступа, изначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.
Параметры:
capacity — вместимость этой очереди
fair — если true, доступ к очереди потоков, заблокированных при добавлении или удалении элементов, обрабатывается в порядке FIFO; если false, порядок доступа не определен.
c — коллекция элементов, которые должны содержаться в очереди изначально
Исключения:
IllegalArgumentException — если capacity меньше c.size() или меньше 1.
NullPointerException — если заданная коллекция или любой из ее элементов равен null

Подробное описание методов

add

public boolean add(E e)
Вставляет указанный элемент в конец этой очереди, если это можно сделать немедленно, не превышая вместимость очереди; при успешной вставке возвращает true, а если очередь заполнена, выбрасывает IllegalStateException.
Определено в:
add в интерфейсе BlockingQueue<E>
Определено в:
add в интерфейсе Collection<E>
Определено в:
add в интерфейсе Queue<E>
Переопределяет:
add в классе AbstractQueue<E>
Параметры:
e — добавляемый элемент
Возвращает:
true (как указано в Collection.add(E))
Исключения:
IllegalStateException — если очередь заполнена
NullPointerException — если указанный элемент равен null

offer

public boolean offer(E e)
Вставляет указанный элемент в конец этой очереди, если это можно сделать немедленно, не превышая вместимость очереди; при успешной вставке возвращает true, а если очередь заполнена — false. Этот метод обычно предпочтительнее метода add(E), который может не вставить элемент только путем выбрасывания исключения.
Определено в:
offer в интерфейсе BlockingQueue<E>
Определено в:
offer в интерфейсе Queue<E>
Параметры:
e — добавляемый элемент
Возвращает:
true, если элемент добавлен в эту очередь; в противном случае — false
Исключения:
NullPointerException — если указанный элемент равен null

put

public void put(E e) throws InterruptedException
Вставляет указанный элемент в конец этой очереди, ожидая освобождения места, если очередь заполнена.
Определено в:
put в интерфейсе BlockingQueue<E>
Параметры:
e — добавляемый элемент
Исключения:
InterruptedException — если ожидание было прервано
NullPointerException — если указанный элемент равен null

offer

public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
Вставляет указанный элемент в конец этой очереди, ожидая освобождения места в течение заданного времени, если очередь заполнена.
Определено в:
offer в интерфейсе BlockingQueue<E>
Параметры:
e — добавляемый элемент
timeout — время ожидания до прекращения попыток, в единицах unit
unit — TimeUnit, определяющий, как интерпретировать параметр timeout
Возвращает:
true в случае успеха или false, если указанное время ожидания истекло до освобождения места
Исключения:
InterruptedException — если ожидание было прервано
NullPointerException — если указанный элемент равен null

poll

public E poll()
Описание скопировано из интерфейса: Queue
Извлекает и удаляет элемент из начала этой очереди или возвращает null, если очередь пуста.
Определено в:
poll в интерфейсе Queue<E>
Возвращает:
элемент из начала этой очереди или null, если очередь пуста

take

public E take() throws InterruptedException
Описание скопировано из интерфейса: BlockingQueue
Извлекает и удаляет элемент из начала этой очереди, при необходимости ожидая, пока элемент станет доступен.
Определено в:
take в интерфейсе BlockingQueue<E>
Возвращает:
элемент из начала этой очереди
Исключения:
InterruptedException — если ожидание было прервано

poll

public E poll(long timeout, TimeUnit unit) throws InterruptedException
Описание скопировано из интерфейса: BlockingQueue
Извлекает и удаляет элемент из начала этой очереди, при необходимости ожидая появления элемента в течение заданного времени.
Определено в:
poll в интерфейсе BlockingQueue<E>
Параметры:
timeout — время ожидания до прекращения попыток, в единицах unit
unit — TimeUnit, определяющий, как интерпретировать параметр timeout
Возвращает:
элемент из начала этой очереди или null, если указанное время ожидания истекло до появления элемента
Исключения:
InterruptedException — если ожидание было прервано

peek

public E peek()
Описание скопировано из интерфейса: Queue
Получает, но не удаляет элемент из начала этой очереди или возвращает null, если очередь пуста.
Определено в:
peek в интерфейсе Queue<E>
Возвращает:
элемент из начала этой очереди или null, если очередь пуста

size

public int size()
Возвращает количество элементов в этой очереди.
Определено в:
size в интерфейсе Collection<E>
Возвращает:
количество элементов в этой очереди

remainingCapacity

public int remainingCapacity()
Возвращает количество дополнительных элементов, которые эта очередь в идеальных условиях (при отсутствии ограничений памяти и ресурсов) может принять без блокировки. Это значение всегда равно начальной вместимости этой очереди за вычетом ее текущего size.

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

Определено в:
remainingCapacity в интерфейсе BlockingQueue<E>
Возвращает:
оставшаяся вместимость

remove

public boolean remove(Object o)
Удаляет из этой очереди один экземпляр указанного элемента, если он присутствует. Точнее, удаляет элемент e такой, что o.equals(e), если очередь содержит один или несколько таких элементов. Возвращает true, если очередь содержала указанный элемент (или, что равнозначно, если вызов изменил очередь).

Удаление внутренних элементов из очередей на основе кольцевого массива по своей природе является медленной и нарушающей работу операцией, поэтому ее следует выполнять только в исключительных случаях, в идеале — лишь когда известно, что другие потоки не имеют доступа к очереди.

Определено в:
remove в интерфейсе BlockingQueue<E>
Определено в:
remove в интерфейсе Collection<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o — элемент, который следует удалить из этой очереди, если он присутствует
Возвращает:
true, если вызов изменил эту очередь

contains

public boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент. Точнее, возвращает true тогда и только тогда, когда эта очередь содержит хотя бы один элемент e такой, что o.equals(e).
Определено в:
contains в интерфейсе BlockingQueue<E>
Определено в:
contains в интерфейсе Collection<E>
Переопределяет:
contains в классе AbstractCollection<E>
Параметры:
o — объект, наличие которого в этой очереди требуется проверить
Возвращает:
true, если эта очередь содержит указанный элемент

toArray

public Object[] toArray()
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке.

Возвращаемый массив будет «безопасным»: эта очередь не хранит на него ссылок. (Иными словами, этот метод должен выделить новый массив.) Таким образом, вызывающий код может свободно изменять возвращенный массив.

Этот метод служит связующим звеном между API на основе массивов и API на основе коллекций.

Определено в:
toArray в интерфейсе Collection<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Возвращает:
массив, содержащий все элементы этой очереди

toArray

public <T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке; тип возвращаемого массива во время выполнения совпадает с типом указанного массива. Если очередь помещается в указанный массив, возвращается этот массив. В противном случае выделяется новый массив с типом указанного массива во время выполнения и размером этой очереди.

Если очередь помещается в указанный массив с запасом (то есть массив содержит больше элементов, чем очередь), элемент массива, следующий непосредственно за концом очереди, устанавливается в null.

Как и метод toArray(), этот метод служит связующим звеном между API на основе массивов и API на основе коллекций. Кроме того, этот метод позволяет точно контролировать тип выходного массива во время выполнения и при определенных обстоятельствах может использоваться для сокращения затрат на выделение памяти.

Предположим, что x — это очередь, содержащая только строки. Следующий код можно использовать для выгрузки очереди в новый выделенный массив типа String:

 String[] y = x.toArray(new String[0]);
Обратите внимание, что toArray(new Object[0]) функционально идентичен toArray().
Определено в:
toArray в интерфейсе Collection<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Параметры типа:
T — тип компонентов массива, в котором будет храниться коллекция
Параметры:
a — массив, в который следует поместить элементы очереди, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа во время выполнения
Возвращает:
массив, содержащий все элементы этой очереди
Исключения:
ArrayStoreException — если тип указанного массива во время выполнения не является супертипом типа каждого элемента этой очереди во время выполнения
NullPointerException — если указанный массив равен null

clear

public void clear()
Атомарно удаляет все элементы из этой очереди. После возврата этого вызова очередь будет пуста.
Определено в:
clear в интерфейсе Collection<E>
Переопределяет:
clear в классе AbstractQueue<E>

drainTo

public int drainTo(Collection<? super E> c)
Описание скопировано из интерфейса: BlockingQueue
Удаляет все доступные элементы из этой очереди и добавляет их в указанную коллекцию. Эта операция может быть эффективнее, чем многократный вызов poll для этой очереди. Если при попытке добавить элементы в коллекцию c возникает ошибка, в момент выбрасывания соответствующего исключения элементы могут находиться ни в одной, в одной или в обеих коллекциях. Попытка перенести элементы очереди в нее саму приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.
Определено в:
drainTo в интерфейсе BlockingQueue<E>
Параметры:
c — коллекция, в которую нужно перенести элементы
Возвращает:
количество перенесенных элементов
Исключения:
UnsupportedOperationException — если указанная коллекция не поддерживает добавление элементов
ClassCastException — если класс элемента этой очереди не позволяет добавить его в указанную коллекцию
NullPointerException — если указанная коллекция равна null
IllegalArgumentException — если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди не позволяет добавить его в указанную коллекцию

drainTo

public int drainTo(Collection<? super E> c, int maxElements)
Описание скопировано из интерфейса: BlockingQueue
Удаляет из этой очереди не более указанного количества доступных элементов и добавляет их в указанную коллекцию. Если при попытке добавить элементы в коллекцию c возникает ошибка, в момент выбрасывания соответствующего исключения элементы могут находиться ни в одной, в одной или в обеих коллекциях. Попытка перенести элементы очереди в нее саму приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.
Определено в:
drainTo в интерфейсе BlockingQueue<E>
Параметры:
c — коллекция, в которую нужно перенести элементы
maxElements — максимальное количество переносимых элементов
Возвращает:
количество перенесенных элементов
Исключения:
UnsupportedOperationException — если указанная коллекция не поддерживает добавление элементов
ClassCastException — если класс элемента этой очереди не позволяет добавить его в указанную коллекцию
NullPointerException — если указанная коллекция равна null
IllegalArgumentException — если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди не позволяет добавить его в указанную коллекцию

iterator

public Iterator<E> iterator()
Возвращает итератор по элементам этой очереди в надлежащем порядке. Элементы возвращаются от первого (начала) к последнему (концу).

Возвращаемый итератор является слабо согласованным.

Определено в:
iterator в интерфейсе Collection<E>
Определено в:
iterator в интерфейсе Iterable<E>
Определено в:
iterator в классе AbstractCollection<E>
Возвращает:
итератор по элементам этой очереди в надлежащем порядке

spliterator

public Spliterator<E> spliterator()
Возвращает Spliterator по элементам этой очереди.

Возвращаемый сплитератор является слабо согласованным.

Spliterator сообщает о характеристиках Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.

Определено в:
spliterator в интерфейсе Collection<E>
Определено в:
spliterator в интерфейсе Iterable<E>
Примечание по реализации:
Spliterator реализует trySplit, чтобы обеспечить ограниченный уровень параллелизма.
Возвращает:
Spliterator по элементам этой очереди
С версии:
1.8

forEach

public void forEach(Consumer<? super E> action)
Описание скопировано из интерфейса: Iterable
Выполняет указанное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение. Если порядок итерации определен, действия выполняются в этом порядке. Исключения, выброшенные действием, передаются вызывающему коду.

Поведение этого метода не определено, если действие производит побочные эффекты, изменяющие исходный набор элементов, за исключением случаев, когда переопределяющий класс определяет политику конкурентного изменения.

Определено в:
forEach в интерфейсе Iterable<E>
Параметры:
action — действие, выполняемое для каждого элемента
Исключения:
NullPointerException — если указанное действие равно null

removeIf

public boolean removeIf(Predicate<? super E> filter)
Описание скопировано из интерфейса: Collection
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату (необязательная операция). Ошибки или исключения времени выполнения, возникающие во время итерации или при выполнении предиката, передаются вызывающему коду.
Определено в:
removeIf в интерфейсе Collection<E>
Параметры:
filter — предикат, возвращающий true для элементов, подлежащих удалению
Возвращает:
true, если были удалены какие-либо элементы
Исключения:
NullPointerException — если указанный фильтр равен null

removeAll

public boolean removeAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Удаляет из этой коллекции все элементы, которые также содержатся в указанной коллекции (необязательная операция). После возврата этого вызова в этой коллекции не останется элементов, общих с указанной коллекцией.
Определено в:
removeAll в интерфейсе Collection<E>
Переопределяет:
removeAll в классе AbstractCollection<E>
Параметры:
c — коллекция, содержащая элементы, которые следует удалить из этой коллекции
Возвращает:
true, если вызов изменил эту коллекцию
Исключения:
NullPointerException — если эта коллекция содержит один или несколько элементов null, а указанная коллекция не поддерживает элементы null (необязательно), либо если указанная коллекция равна null
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция). Иными словами, удаляет из этой коллекции все элементы, которые не содержатся в указанной коллекции.
Определено в:
retainAll в интерфейсе Collection<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c — коллекция, содержащая элементы, которые следует оставить в этой коллекции
Возвращает:
true, если вызов изменил эту коллекцию
Исключения:
NullPointerException — если эта коллекция содержит один или несколько элементов null, а указанная коллекция не допускает элементы null (необязательно), либо если указанная коллекция равна null
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, где приводятся более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ArrayBlockingQueue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API