Spec-Zone.ru › OpenJDK 25

Класс LinkedBlockingQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.LinkedBlockingQueue<E>
Параметры типа:
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)
Вставляет указанный элемент в хвост этой очереди, при необходимости ожидая освобождения места не дольше указанного времени ожидания.
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)
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке; тип возвращаемого массива во время выполнения совпадает с типом указанного массива.

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

add, addAll, element, remove

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

containsAll, isEmpty, toString

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

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

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

add

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

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

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

element, 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

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 — если поток прерван во время ожидания

poll

public E poll()
Описание скопировано из интерфейса: Queue
Извлекает и удаляет элемент из начала этой очереди или возвращает null, если очередь пуста.
Указано в:
poll в интерфейсе Queue<E>
Возвращает:
элемент из начала этой очереди или null, если очередь пуста

peek

public E peek()
Описание скопировано из интерфейса: Queue
Получает, но не удаляет элемент из начала этой очереди или возвращает null, если очередь пуста.
Указано в:
peek в интерфейсе Queue<E>
Возвращает:
элемент из начала этой очереди или 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 на основе массивов и API на основе коллекций.

Указано в:
toArray в интерфейсе Collection<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Возвращает:
массив, содержащий все элементы этой очереди

toArray

public <T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы этой очереди в правильном порядке; тип возвращаемого массива во время выполнения совпадает с типом указанного массива. Если очередь помещается в указанный массив, она возвращается в нем. В противном случае выделяется новый массив с типом указанного массива во время выполнения и размером, равным размеру этой очереди.

Если очередь помещается в указанный массив с запасом места (то есть массив содержит больше элементов, чем эта очередь), элемент массива непосредственно после конца очереди устанавливается в null.

Как и метод toArray(), этот метод служит связующим звеном между API на основе массивов и 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.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)

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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