Класс 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.
- Since:
- 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 |
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип времени выполнения возвращаемого массива — это тип указанного массива. |
Методы, объявленные в классе 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
public E poll()
Queuenull , если эта очередь пуста.- Указано в:
-
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()
Queuenull , если эта очередь пуста.- Указано в:
-
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)
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
Удалить все
public boolean removeAll(Collection<?> c)
AbstractCollection- Определено в:
-
removeAllв интерфейсеCollection<E> - Переопределяет:
-
removeAllв классеAbstractCollection<E> - Параметры:
-
c- коллекция, содержащая элементы, которые должны быть удалены из этой коллекции - Возвращает:
-
trueесли эта коллекция изменилась в результате вызова - Исключения:
-
NullPointerException- если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не поддерживает нулевые элементы (необязательно) или если указанная коллекция равна null - См. также:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Определено в:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c- коллекция, содержащая элементы, которые должны быть сохранены в этой коллекции - Возвращает:
-
trueесли эта коллекция изменилась в результате вызова - Исключения:
-
NullPointerException- если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не допускает нулевые элементы (необязательно) или если указанная коллекция равна null - См. также:
© 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