Spec-Zone.ru › OpenJDK 24

Класс ArrayBlockingQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.ArrayBlockingQueue<E>
Type Parameters:
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.

Since:
1.5
See Also:
  • Serialized Form

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

Конструктор Описание
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>
Возвращает:
оставшаяся емкость

удалить

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

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)

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ArrayBlockingQueue.html

Spec-Zone.ru

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