Класс 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 Collections Framework.
- Начиная с версии:
- 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
Методы, объявленные в классе AbstractCollection
containsAll, isEmpty, toString
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray
Подробное описание конструкторов
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ArrayBlockingQueue.html