Класс LinkedBlockingQueue<E>

Type Parameters:
E - тип элементов, хранящихся в этой очереди
Все реализованные интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
public class LinkedBlockingQueue<E>
extends AbstractQueue<E>
implements BlockingQueue<E>, Serializable

Неограниченная (по желанию) очередь блокирования, основанная на связанных узлах. Эта очередь упорядочивает элементы по принципу FIFO (первым вошел, первым вышел). Голова очереди — это элемент, который находится в очереди дольше всего. Хвост очереди — это элемент, который находится в очереди меньше всего времени. Новые элементы вставляются в хвост очереди, а операции извлечения из очереди получают элементы в голове очереди. Очереди, основанные на связанных узлах, обычно имеют более высокую производительность, чем очереди на основе массивов, но в большинстве конкурентных приложений их производительность менее предсказуема.

Необязательный параметр ограничения по емкости конструктора служит для предотвращения чрезмерного расширения очереди. Емкость, если она не указана, равна Integer.MAX_VALUE. Связанные узлы динамически создаются при каждой вставке, если это не приведет к превышению емкости очереди.

Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.

Этот класс является членом Java Collections Framework.

С тех пор:
1.5
См. также:
Сериализованная форма

Конструкторы

Конструктор Описание
LinkedBlockingQueue()

Создает LinkedBlockingQueue с емкостью Integer.MAX_VALUE.

LinkedBlockingQueue​(int capacity)

Создает LinkedBlockingQueue с заданной (фиксированной) емкостью.

LinkedBlockingQueue​(Collection<? extends E> c)

Создает LinkedBlockingQueue с емкостью Integer.MAX_VALUE, первоначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.

Методы

Модификатор и тип Метод Описание
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)

Вставляет указанный элемент в хвост этой очереди, ожидая, если необходимо, до заданного времени ожидания, пока освободится место.

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 над элементами в этой очереди.

Object[] toArray()

Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности.

<T> T[] toArray​(T[] a)

Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип времени выполнения возвращаемого массива соответствует типу указанного массива.

Методы, объявленные в классе java.util.AbstractQueue

add, addAll, element, remove

Методы, объявленные в классе java.util.AbstractCollection

containsAll, isEmpty, toString

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

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

add, poll, take

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

addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray

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

element, peek, poll, remove

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

LinkedBlockingQueue

public LinkedBlockingQueue()

Создает LinkedBlockingQueue с емкостью Integer.MAX_VALUE.

LinkedBlockingQueue

public LinkedBlockingQueue(int capacity)

Создает LinkedBlockingQueue с заданной (фиксированной) емкостью.

Параметры:
capacity - емкость этой очереди
Исключения:
IllegalArgumentException - если capacity не больше нуля

LinkedBlockingQueue

public LinkedBlockingQueue(Collection<? extends E> c)

Создает LinkedBlockingQueue с емкостью Integer.MAX_VALUE, первоначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.

Параметры:
c - коллекция элементов, которые должны быть первоначально содержаться
Исключения:
NullPointerException - если указанная коллекция или любой из ее элементов равны null

Методы

size

public int size()

Возвращает количество элементов в этой очереди.

Указано в:
size в интерфейсе Collection<E>
Возвращает:
количество элементов в этой очереди

remainingCapacity

public int remainingCapacity()

Возвращает количество дополнительных элементов, которые эта очередь может в идеале (в отсутствие ограничений памяти или ресурсов) принять без блокировки. Это всегда равно начальной емкости этой очереди минус текущая size этой очереди.

Обратите внимание, что вы не всегда можете определить, будет ли попытка вставить элемент успешной, проверяя remainingCapacity, поскольку может случиться, что другой поток собирается вставить или удалить элемент.

Указано в:
remainingCapacity в интерфейсе BlockingQueue<E>
Возвращает:
оставшуюся емкость

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

offer

public boolean offer(E e)

Вставляет указанный элемент в конец этой очереди, если это возможно сделать немедленно, не превышая емкость очереди, возвращая true при успехе и false , если эта очередь заполнена. При использовании очереди с ограниченной емкостью этот метод обычно предпочтительнее метода add, который может не вставить элемент, только бросив исключение.

Указано в:
offer в интерфейсе BlockingQueue<E>
Указано в:
offer в интерфейсе Queue<E>
Параметры:
e - элемент для добавления
Возвращает:
true , если элемент был добавлен в эту очередь, иначе false
Исключения:
NullPointerException - если указанный элемент имеет значение null

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.

Указано в:
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

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 в интерфейсе Collection<E>
Указано в:
iterator в интерфейсе Iterable<E>
Указано в:
iterator в классе AbstractCollection<E>
Возвращает:
итератор по элементам в этой очереди в правильном порядке

spliterator

public Spliterator<E> spliterator()

Возвращает 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

removeAll

public boolean removeAll(Collection<?> c)

Описание скопировано из класса: AbstractCollection

Удаляет все элементы этого набора, которые также содержатся в указанном наборе (дополнительная операция). После возврата этого вызова этот набор не будет содержать общих элементов со специфицированным набором.

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

retainAll

public boolean retainAll(Collection<?> c)

Описание скопировано из класса: AbstractCollection

Сохраняет только элементы в этом наборе, которые содержатся в указанном наборе (необязательная операция). Другими словами, удаляет из этого набора все его элементы, которые не содержатся в указанном наборе.

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

© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/LinkedBlockingQueue.html

Spec-Zone .ru
спецификации, руководства, описания, API