Spec-Zone.ru › OpenJDK 17

Класс 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
See Also:
  • Serialized Form

Краткое описание конструкторов

Конструктор Описание
ArrayBlockingQueue(int capacity)
Создает ArrayBlockingQueue с заданной (фиксированной) емкостью и политикой доступа по умолчанию.
ArrayBlockingQueue(int capacity, boolean fair)
Создает ArrayBlockingQueue с заданной (фиксированной) емкостью и заданной политикой доступа.
ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
Создает ArrayBlockingQueue с заданной (фиксированной) емкостью, заданной политикой доступа и изначально содержащей элементы заданного набора, добавленные в порядке обхода итератора набора.

Краткое описание методов

Модификатор и тип Метод Описание
boolean add(E e)
Вставляет указанный элемент в хвост этой очереди, если это возможно сделать немедленно без превышения емкости очереди, возвращает true при успехе и выбрасывает IllegalStateException , если эта очередь полна.
void clear()
Атомарно удаляет все элементы из этой очереди.
boolean contains(Object o)
Возвращает true , если эта очередь содержит указанный элемент.
int drainTo(Collection<? super E> c)
Удаляет все доступные элементы из этой очереди и добавляет их в заданный набор.
int drainTo(Collection<? super E> c, int maxElements)
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданный набор.
void forEach(Consumer<? super E> action)
Выполняет заданное действие для каждого элемента очереди Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение.
Iterator<E> iterator()
Возвращает итератор по элементам в этой очереди в правильном порядке.
boolean offer(E e)
Вставляет указанный элемент в хвост этой очереди, если это возможно сделать немедленно без превышения емкости очереди, возвращает true при успехе и false , если эта очередь полна.
boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в хвост этой очереди, ожидая до заданного времени ожидания, чтобы освободить место, если очередь заполнена.
E peek()
Возвращает голову этой очереди без удаления, или возвращает null , если очередь пуста.
E poll()
Возвращает и удаляет голову этой очереди или возвращает null , если очередь пуста.
E poll(long timeout, TimeUnit unit)
Возвращает и удаляет голову этой очереди, ожидая до заданного времени ожидания, если это необходимо, чтобы получить доступный элемент.
void put(E e)
Вставляет указанный элемент в хвост этой очереди, ожидая, пока освободится место, если очередь заполнена.
int remainingCapacity()
Возвращает количество дополнительных элементов, которые эта очередь может идеальным образом (в отсутствие ограничений памяти или ресурсов) принять без блокировки.
boolean remove(Object o)
Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует.
boolean removeAll(Collection<?> c)
Удаляет все элементы этого набора, которые также содержатся в указанном наборе (необязательная операция).
boolean removeIf(Predicate<? super E> filter)
Удаляет все элементы этого набора, которые удовлетворяют заданному предикату.
boolean retainAll(Collection<?> c)
Сохраняет только элементы в этом наборе, которые содержатся в указанном наборе (необязательная операция).
int size()
Возвращает количество элементов в этой очереди.
Spliterator<E> spliterator()
Возвращает Spliterator по элементам в этой очереди.
E take()
Возвращает и удаляет голову этой очереди, ожидая, если необходимо, пока доступный элемент не появится.
Object[] toArray()
Возвращает массив, содержащий все элементы в этой очереди в правильном порядке.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы в этой очереди в правильном порядке; тип времени выполнения возвращаемого массива — тип указанного массива.

Методы, объявленные в классе 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

Методы, объявленные в интерфейсе java.util.Queue

element, remove

Подробное описание конструкторов

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()
Описание скопировано из интерфейса: 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>
Возвращает:
количество элементов в этой очереди

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 , если эта очередь изменилась в результате вызова
END_OF_DOCUMENT_MARKER

содержит

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)
Описание скопировано из интерфейса: 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 - если указанная коллекция — это эта очередь или какая-либо характеристика элемента этой очереди не позволяет добавить его в указанную коллекцию

итератор

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)
Описание скопировано из интерфейса: Iterable
Выполняет заданное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. Действия выполняются в порядке итерации, если этот порядок указан. Исключение, выброшенное действием, передаётся вызывающей стороне.

Поведение этого метода не определено, если действие производит побочные эффекты, которые изменяют основной источник элементов, если только переопределяемый класс не указал политику одновременного изменения.

Указано в:
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
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

Сохранить все

public boolean retainAll(Collection<?> c)
Описание, скопированное из класса: AbstractCollection
Сохраняет только те элементы в этом наборе, которые содержатся в указанном наборе (необязательная операция). Другими словами, удаляет из этого набора все его элементы, которые не содержатся в указанном наборе.
Определено в:
retainAll в интерфейсе Collection<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c - набор, содержащий элементы, которые необходимо сохранить в этом наборе
Возвращает:
true если этот набор был изменён в результате вызова
Исключения:
NullPointerException - если этот набор содержит один или несколько нулевых элементов, а указанный набор не допускает нулевых элементов (необязательно), или если указанный набор равен null
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/ArrayBlockingQueue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API