Класс 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
- См. также:
- Сериализованная форма
Конструкторы
| Конструктор и описание |
|---|
ArrayBlockingQueue(int capacity) Создаёт очередь с заданной (фиксированной) ёмкостью и политикой доступа по умолчанию. |
ArrayBlockingQueue(int capacity,
boolean fair) Создаёт очередь с заданной (фиксированной) ёмкостью и указанной политикой доступа. |
ArrayBlockingQueue(int capacity,
boolean fair,
Collection<? extends E> c) Создаёт очередь с заданной (фиксированной) ёмкостью, указанной политикой доступа и содержащую изначально элементы заданного набора, добавленные в порядке обхода итератора набора. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
boolean |
add(E e) Вставляет указанный элемент в конец этой очереди, если это возможно сделать немедленно без превышения ёмкости очереди, возвращая |
void |
clear() Атомарно удаляет все элементы из этой очереди. |
boolean |
contains(Object o) Возвращает |
int |
drainTo(Collection<? super E> c) Удаляет все доступные элементы из этой очереди и добавляет их в заданный набор. |
int |
drainTo(Collection<? super E> c,
int maxElements) Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданный набор. |
Iterator<E> |
iterator() Возвращает итератор по элементам в этой очереди в правильном порядке. |
boolean |
offer(E e) Вставляет указанный элемент в конец этой очереди, если это возможно сделать немедленно без превышения ёмкости очереди, возвращая |
boolean |
offer(E e,
long timeout,
TimeUnit unit) Вставляет указанный элемент в конец этой очереди, ожидая до указанного времени ожидания, если очередь полная, чтобы освободилось место. |
E |
peek() Извлекает, но не удаляет, голову этой очереди или возвращает |
E |
poll() Извлекает и удаляет голову этой очереди или возвращает |
E |
poll(long timeout,
TimeUnit unit) Извлекает и удаляет голову этой очереди, ожидая до указанного времени ожидания, если необходимо, пока элемент не станет доступным. |
void |
put(E e) Вставляет указанный элемент в конец этой очереди, ожидая, пока освободится место, если очередь полная. |
int |
remainingCapacity() Возвращает количество дополнительных элементов, которые эта очередь теоретически (в отсутствие ограничений памяти или ресурсов) может принять без блокировки. |
boolean |
remove(Object o) Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. |
int |
size() Возвращает количество элементов в этой очереди. |
Spliterator<E> |
spliterator() Возвращает |
E |
take() Извлекает и удаляет голову этой очереди, ожидая, если необходимо, пока элемент станет доступным. |
Object[] |
toArray() Возвращает массив, содержащий все элементы в этой очереди в правильном порядке. |
<T> T[] |
toArray(T[] a) Возвращает массив, содержащий все элементы в этой очереди в правильном порядке; тип возвращаемого массива — тип указанного массива. |
String |
toString() Возвращает строковое представление этого набора. |
Методы, унаследованные от класса java.util.AbstractQueue
addAll, element, remove Методы, унаследованные от класса java.util.AbstractCollection
containsAll, isEmpty, removeAll, retainAll Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Методы, унаследованные от интерфейса java.util.Queue
element, remove Методы, унаследованные от интерфейса java.util.Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, stream Методы, унаследованные от интерфейса java.lang.Iterable
forEach Конструкторы
ArrayBlockingQueue
public ArrayBlockingQueue(int capacity)
Создаёт очередь с заданной (фиксированной) ёмкостью и политикой доступа по умолчанию.
- Параметры:
-
capacity- ёмкость этой очереди - Исключения:
-
IllegalArgumentException- еслиcapacity < 1
ArrayBlockingQueue
public ArrayBlockingQueue(int capacity,
boolean fair) Создаёт очередь с заданной (фиксированной) ёмкостью и указанной политикой доступа.
- Параметры:
-
capacity- ёмкость этой очереди -
fair- еслиtrue, то доступ к очереди для потоков, заблокированных на вставку или удаление, обрабатывается в порядке FIFO; еслиfalseпорядок доступа не определён. - Исключения:
-
IllegalArgumentException- еслиcapacity < 1
ArrayBlockingQueue
public ArrayBlockingQueue(int capacity,
boolean fair,
Collection<? extends E> c) Создаёт очередь с заданной (фиксированной) ёмкостью, указанной политикой доступа и первоначально содержащей элементы заданного набора, добавленные в порядке обхода итератора набора.
- Параметры:
-
capacity- ёмкость этой очереди -
fair- еслиtrue, то доступ к очереди для потоков, заблокированных на вставку или удаление, обрабатывается в порядке FIFO; еслиfalseпорядок доступа не определён. -
c- набор элементов, которые должны содержаться первоначально - Исключения:
-
IllegalArgumentException- еслиcapacityменьшеc.size(), или меньше 1. -
NullPointerException- если указанный набор или любой из его элементов равны null
Методы
add
public boolean add(E e)
Вставляет указанный элемент в конец этой очереди, если это возможно сделать немедленно без превышения ёмкости очереди, возвращая true при успехе и выбрасывая IllegalStateException , если эта очередь заполнена.
- Определено в:
-
addв интерфейсеCollection<E> - Определено в:
-
addв интерфейсеBlockingQueue<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> - Определено в:
-
sizeв классеAbstractCollection<E> - Возвращает:
- количество элементов в этой очереди
remainingCapacity
public int remainingCapacity()
Возвращает количество дополнительных элементов, которые эта очередь может теоретически (в отсутствие ограничений памяти или ресурсов) принять без блокировки. Это всегда равно начальной ёмкости этой очереди минус текущее size этой очереди.
Обратите внимание, что вы не всегда можете определить, успешно ли попытка вставить элемент, проверяя remainingCapacity , потому что может случиться, что другой поток собирается вставить или удалить элемент.
- Определено в:
-
remainingCapacityв интерфейсеBlockingQueue<E> - Возвращает:
- остающаяся ёмкость
remove
public boolean remove(Object o)
Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. Более формально, удаляет элемент e такой, что o.equals(e), если эта очередь содержит один или несколько таких элементов. Возвращает true , если эта очередь содержала указанный элемент (или, что эквивалентно, если эта очередь изменилась в результате вызова).
Удаление внутренних элементов в очередях на основе циклических массивов является по своей природе медленной и разрушительной операцией, поэтому её следует выполнять только в исключительных случаях, желательно только когда известно, что к очереди не обращаются другие потоки.
- Определено в:
-
removeв интерфейсеCollection<E> - Определено в:
-
removeв интерфейсеBlockingQueue<E> - Переопределено в:
-
removeв классеAbstractCollection<E> - Параметры:
-
o- элемент, который нужно удалить из этой очереди, если он присутствует - Возвращает:
-
trueесли эта очередь изменилась в результате вызова
contains
public boolean contains(Object o)
Возвращает true , если эта очередь содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда эта очередь содержит по крайней мере один элемент e такой, что o.equals(e).
- Определено в:
-
containsв интерфейсеCollection<E> - Определено в:
-
containsв интерфейсеBlockingQueue<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
toString
public String toString()
Описание скопировано из класса: AbstractCollection
Возвращает строковое представление этой коллекции. Строковое представление состоит из списка элементов коллекции в порядке их возврата итератором, заключённых в квадратные скобки ("[]"). Соседние элементы разделяются символами ", " (запятая и пробел). Элементы преобразуются в строки с помощью String.valueOf(Object).
- Переопределяет:
-
toStringв классеAbstractCollection<E> - Возвращает:
- строковое представление этой коллекции
clear
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- если указанная коллекция — это эта очередь или какие-либо свойства элемента этой очереди препятствуют его добавлению в указанную коллекцию
iterator
public Iterator<E> iterator()
Возвращает итератор по элементам этой очереди в правильном порядке. Элементы будут возвращаться в порядке от первого (голова) до последнего (хвост).
Возвращаемый итератор — слабо согласованный.
- Указано в:
-
iteratorв интерфейсеIterable<E> - Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам этой очереди в правильном порядке
spliterator
public Spliterator<E> spliterator()
Возвращает Spliterator по элементам этой очереди.
Возвращаемый разделитель — слабо согласованный.
Разделитель Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.
- Указано в:
-
spliteratorв интерфейсеIterable<E> - Указано в:
-
spliteratorв интерфейсеCollection<E> - Примечание для реализации:
SpliteratorреализуетtrySplitдля обеспечения ограниченной параллельности.- Возвращает:
Spliteratorпо элементам этой очереди- С:
- 1.8
© 1993, 2020, 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.