Класс 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
Это классический «ограниченный буфер», в котором массив фиксированного размера хранит элементы, вставленные производителями и извлечённые потребителями. После создания ёмкость изменить нельзя. Попытки put элемента в полную очередь приведут к блокировке операции; попытки take элемента из пустой очереди аналогичным образом заблокируют.
Этот класс поддерживает необязательную политику честности для упорядочивания ожидающих потоков производителей и потребителей. По умолчанию это упорядочивание не гарантируется. Однако очередь, созданная с политикой честности, установленной на true, предоставляет потокам доступ в порядке FIFO. Честность обычно снижает пропускную способность, но уменьшает изменчивость и предотвращает голодание.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Этот класс является частью Java Collections Framework.
- Since:
- 1.5
- See Also:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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 |
Возвращает массив, содержащий все элементы в этой очереди в правильном порядке; тип возвращаемого массива соответствует типу заданного массива. |
Методы, объявленные в классе 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
Краткое описание конструкторов
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> - Возвращает:
- оставшаяся емкость
удалить
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)
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- если указанная коллекция — это эта очередь или некоторые свойства элемента этой очереди не позволяют добавить его в заданную коллекцию
итератор
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)
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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ArrayBlockingQueue.html