Spec-Zone.ru › OpenJDK 21

Класс 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.

Since:
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)
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип времени выполнения возвращаемого массива — это тип указанного массива.

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

addAll, element, remove

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

containsAll, isEmpty, toString

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

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

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

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

Методы, объявленные в интерфейсе java.util.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 , если эта очередь изменилась в результате вызова

содержит

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 на основе массивов и на основе коллекций.

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

toArray

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

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

Как и метод toArray(), этот метод служит мостом между 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

очистить

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

drainTo

public int drainTo(Collection<? super E> c)
Описание скопировано из интерфейса: BlockingQueue
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. Эта операция может быть более эффективной, чем многократное опробование этой очереди. Неудача, возникшая при попытке добавить элементы в коллекцию 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 - если заданная коллекция является этой очередью или какая-либо характеристика элемента этой очереди препятствует его добавлению в заданную коллекцию

итератор

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

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

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

разделитель

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

Удалить все

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

retainAll

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

© 1993, 2023, 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/21/docs/api/java.base/java/util/concurrent/ArrayBlockingQueue.html

Spec-Zone.ru

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