Класс ArrayBlockingQueue<E>
- Параметры типа:
E- тип элементов, хранящихся в этой очереди
- Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
Это классический «буфер ограниченного размера», в котором массив фиксированного размера хранит элементы, добавляемые производителями и извлекаемые потребителями. После создания ёмкость изменить нельзя. Попытки put элемент в заполненную очередь приведут к блокировке операции; попытки take элемент из пустой очереди также приведут к блокировке.
Этот класс поддерживает необязательную политику справедливости для упорядочивания ожидающих потоков-производителей и потоков-потребителей. По умолчанию этот порядок не гарантируется. Однако очередь, созданная с параметром справедливости, равным true, предоставляет потокам доступ в порядке FIFO. Справедливость обычно снижает пропускную способность, но уменьшает её вариативность и предотвращает голодание.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Этот класс входит в состав фреймворка коллекций Java.
- Начиная с:
- 1.5
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ArrayBlockingQueue |
Создаёт ArrayBlockingQueue с заданной (фиксированной) ёмкостью и политикой доступа по умолчанию. |
ArrayBlockingQueue |
Создаёт ArrayBlockingQueue с заданной (фиксированной) ёмкостью и указанной политикой доступа. |
ArrayBlockingQueue |
Создаёт ArrayBlockingQueue с заданной (фиксированной) ёмкостью и указанной политикой доступа, изначально содержащую элементы заданной коллекции, добавленные в порядке обхода её итератора. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Вставляет указанный элемент в хвост этой очереди, если это можно сделать немедленно, не превышая её ёмкость; в случае успеха возвращает true, а если очередь заполнена, выбрасывает IllegalStateException. |
void |
clear() |
Атомарно удаляет все элементы из этой очереди. |
boolean |
contains |
Возвращает true, если эта очередь содержит указанный элемент. |
int |
drainTo |
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. |
int |
drainTo |
Удаляет из этой очереди не более заданного числа доступных элементов и добавляет их в заданную коллекцию. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение. |
Iterator |
iterator() |
Возвращает итератор по элементам этой очереди в надлежащем порядке. |
boolean |
offer |
Вставляет указанный элемент в хвост этой очереди, если это можно сделать немедленно, не превышая её ёмкость; в случае успеха возвращает true, а если очередь заполнена — false. |
boolean |
offer |
Вставляет указанный элемент в хвост этой очереди, ожидая освобождения места не дольше указанного времени, если очередь заполнена. |
E |
peek() |
Получает, но не удаляет голову этой очереди; если очередь пуста, возвращает null. |
E |
poll() |
Получает и удаляет голову этой очереди; если очередь пуста, возвращает null. |
E |
poll |
Получает и удаляет голову этой очереди, при необходимости ожидая появления элемента не дольше указанного времени. |
void |
put |
Вставляет указанный элемент в хвост этой очереди, ожидая освобождения места, если очередь заполнена. |
int |
remainingCapacity() |
Возвращает число дополнительных элементов, которые эта очередь в идеальных условиях (при отсутствии ограничений по памяти или ресурсам) может принять без блокировки. |
boolean |
remove |
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean |
removeAll |
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
boolean |
removeIf |
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату (необязательная операция). |
boolean |
retainAll |
Оставляет только те элементы этой коллекции, которые содержатся в указанной коллекции (необязательная операция). |
int |
size() |
Возвращает число элементов в этой очереди. |
Spliterator |
spliterator() |
Возвращает Spliterator для элементов этой очереди. |
E |
take() |
Получает и удаляет голову этой очереди, при необходимости ожидая появления элемента. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке; тип возвращаемого массива во время выполнения совпадает с типом указанного массива. |
Методы, объявленные в классе AbstractQueue
addAll, element, remove | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет все элементы указанной коллекции в эту очередь. |
E |
element() |
Получает, но не удаляет голову этой очереди. |
E |
remove() |
Получает и удаляет голову этой очереди. |
Методы, объявленные в классе AbstractCollection
containsAll, isEmpty, toString | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
containsAll |
Возвращает true, если эта коллекция содержит все элементы указанной коллекции. |
boolean |
isEmpty() |
Возвращает true, если эта коллекция не содержит элементов. |
String |
toString() |
Возвращает строковое представление этой коллекции. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс объекта Object во время выполнения. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать до пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать до пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать до пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
Методы, объявленные в интерфейсе Collection
equals, hashCode, parallelStream, stream, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает указанный объект с этой коллекцией на равенство. |
int |
hashCode() |
Возвращает значение хеш-кода этой коллекции. |
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream с этой коллекцией в качестве источника. |
default Stream |
stream() |
Возвращает последовательный Stream с этой коллекцией в качестве источника. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator. |
Подробное описание конструкторов
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
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
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)
BlockingQueuec может привести к тому, что на момент выбрасывания связанного исключения элементы не будут находиться ни в одной из коллекций, будут находиться в одной из них или в обеих. Попытка перенести элементы очереди в нее саму приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции.- Определено в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую следует перенести элементы - Возвращает:
- количество перенесенных элементов
- Исключения:
-
UnsupportedOperationException— если указанная коллекция не поддерживает добавление элементов -
ClassCastException— если класс элемента этой очереди не позволяет добавить его в указанную коллекцию -
NullPointerException— если указанная коллекция равна null -
IllegalArgumentException— если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди препятствует его добавлению в указанную коллекцию
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueuec может привести к тому, что на момент выбрасывания связанного исключения элементы не будут находиться ни в одной из коллекций, будут находиться в одной из них или в обеих. Попытка перенести элементы очереди в нее саму приводит к 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)
IterableIterable, пока не будут обработаны все элементы или действие не выбросит исключение. Если порядок обхода определен, действия выполняются в этом порядке. Исключения, выброшенные действием, передаются вызывающему коду. Поведение этого метода не определено, если действие выполняет побочные эффекты, изменяющие исходный набор элементов, если только переопределяющий класс не определил политику параллельной модификации.
- Определено в:
-
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 - См. также:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Определено в:
-
retainAllв интерфейсеCollection<E> - Переопределено:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует оставить в этой коллекции - Возвращает:
-
true, если в результате вызова эта коллекция изменилась - Исключения:
-
NullPointerException— если эта коллекция содержит один или несколько элементов null, а указанная коллекция не допускает элементы null (необязательно), или если указанная коллекция равна null - См. также:
© 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.