Spec-Zone.ru › OpenJDK 25

Класс ConcurrentLinkedQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.ConcurrentLinkedQueue<E>
Параметры типа:
E — тип элементов, хранящихся в этой очереди
Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, Queue<E>
public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> implements Queue<E>, Serializable
Потокобезопасная очередь неограниченного размера на основе связанных узлов. Эта очередь упорядочивает элементы по принципу FIFO (первым пришёл — первым ушёл). Голова очереди — это элемент, который находится в очереди дольше всего. Хвост очереди — это элемент, который находится в очереди меньше всего времени. Новые элементы добавляются в хвост очереди, а операции извлечения из очереди получают элементы из её головы. ConcurrentLinkedQueue — подходящий выбор, если к общей коллекции будут обращаться многие потоки. Как и большинство других реализаций параллельных коллекций, этот класс не допускает использование элементов null.

В этой реализации используется эффективный неблокирующий алгоритм, основанный на алгоритме, описанном в статье Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms Мэджа М. Майкла и Майкла Л. Скотта.

Итераторы слабо согласованы и возвращают элементы, отражающие состояние очереди в некоторый момент времени при создании итератора или после него. Они не выбрасывают ConcurrentModificationException и могут выполняться параллельно с другими операциями. Элементы, находившиеся в очереди с момента создания итератора, будут возвращены ровно один раз.

Обратите внимание: в отличие от большинства коллекций, метод size НЕ выполняется за постоянное время. Из-за асинхронной природы этих очередей для определения текущего количества элементов требуется их обход, поэтому результат может быть неточным, если коллекция изменяется во время обхода.

Массовые операции, добавляющие, удаляющие или проверяющие несколько элементов, например addAll(Collection), removeIf(Predicate) или forEach(Consumer), не гарантированно выполняются атомарно. Например, обход forEach, выполняющийся параллельно с операцией addAll, может увидеть лишь некоторые из добавленных элементов.

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

Эффекты согласованности памяти: как и в других параллельных коллекциях, действия в потоке, предшествующие помещению объекта в ConcurrentLinkedQueue, происходят-перед действиями, следующими за обращением к этому элементу или его удалением из ConcurrentLinkedQueue в другом потоке.

Этот класс входит в состав Java Collections Framework.

Начиная с:
1.5
См. также:
  • Сериализованная форма

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

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

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

Модификатор и тип Метод Описание
boolean add(E e)
Вставляет указанный элемент в хвост этой очереди.
boolean addAll(Collection<? extends E> c)
Добавляет все элементы указанной коллекции в конец этой очереди в том порядке, в котором их возвращает итератор указанной коллекции.
void clear()
Удаляет все элементы из этой очереди.
boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент.
void forEach(Consumer<? super E> action)
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение.
boolean isEmpty()
Возвращает true, если эта очередь не содержит элементов.
Iterator<E> iterator()
Возвращает итератор по элементам этой очереди в надлежащем порядке.
boolean offer(E e)
Вставляет указанный элемент в хвост этой очереди.
E peek()
Извлекает, но не удаляет голову этой очереди или возвращает null, если очередь пуста.
E poll()
Извлекает и удаляет голову этой очереди или возвращает null, если очередь пуста.
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)
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке; тип возвращённого массива во время выполнения совпадает с типом указанного массива.

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

clear, element, remove

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

containsAll, toString

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

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

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

containsAll, equals, hashCode, parallelStream, stream, toArray

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

element, remove

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

ConcurrentLinkedQueue

public ConcurrentLinkedQueue()
Создаёт ConcurrentLinkedQueue, изначально пустую.

ConcurrentLinkedQueue

public ConcurrentLinkedQueue(Collection<? extends E> c)
Создаёт ConcurrentLinkedQueue, изначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.
Параметры:
c — коллекция элементов, которые должны содержаться изначально
Исключения:
NullPointerException — если указанная коллекция или любой её элемент равны null

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

add

public boolean add(E e)
Вставляет указанный элемент в хвост этой очереди. Поскольку очередь не ограничена по размеру, этот метод никогда не выбрасывает IllegalStateException и не возвращает false.
Переопределено из:
add в интерфейсе Collection<E>
Переопределено из:
add в интерфейсе Queue<E>
Переопределяет:
add в классе AbstractQueue<E>
Параметры:
e — добавляемый элемент
Возвращает:
true (согласно спецификации Collection.add(E))
Исключения:
NullPointerException — если указанный элемент равен null

offer

public boolean offer(E e)
Вставляет указанный элемент в хвост этой очереди. Поскольку очередь не ограничена по размеру, этот метод никогда не возвращает false.
Переопределено из:
offer в интерфейсе Queue<E>
Параметры:
e — добавляемый элемент
Возвращает:
true (согласно спецификации Queue.offer(E))
Исключения:
NullPointerException — если указанный элемент равен null

poll

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

peek

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

isEmpty

public boolean isEmpty()
Возвращает true, если эта очередь не содержит элементов.
Переопределено из:
isEmpty в интерфейсе Collection<E>
Переопределяет:
isEmpty в классе AbstractCollection<E>
Возвращает:
true, если эта очередь не содержит элементов

size

public int size()
Возвращает количество элементов в этой очереди. Если очередь содержит более Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.

Обратите внимание: в отличие от большинства коллекций, этот метод НЕ выполняется за постоянное время. Из-за асинхронной природы таких очередей для определения текущего количества элементов требуется обход за O(n). Кроме того, если во время выполнения метода элементы добавляются или удаляются, результат может быть неточным. Поэтому этот метод, как правило, мало полезен в параллельных приложениях.

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

contains

public boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент. Точнее, возвращает true тогда и только тогда, когда эта очередь содержит как минимум один элемент e, такой что o.equals(e).
Переопределено из:
contains в интерфейсе Collection<E>
Переопределяет:
contains в классе AbstractCollection<E>
Параметры:
o — объект, наличие которого в этой очереди проверяется
Возвращает:
true, если эта очередь содержит указанный элемент

remove

public boolean remove(Object o)
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. Точнее, удаляет элемент e, такой что o.equals(e), если очередь содержит один или несколько таких элементов. Возвращает true, если эта очередь содержала указанный элемент (или, что эквивалентно, если очередь изменилась в результате вызова).
Переопределено из:
remove в интерфейсе Collection<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o — элемент, который следует удалить из этой очереди, если он присутствует
Возвращает:
true, если эта очередь изменилась в результате вызова

addAll

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

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

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

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)

clear

public void clear()
Описание скопировано из класса: AbstractQueue
Удаляет все элементы из этой очереди. После возврата этого вызова очередь будет пуста.

Эта реализация многократно вызывает poll, пока он не вернёт null.

Переопределено из:
clear в интерфейсе Collection<E>
Переопределяет:
clear в классе AbstractQueue<E>

forEach

public void forEach(Consumer<? super E> action)
Описание скопировано из интерфейса: Iterable
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение. Действия выполняются в порядке итерации, если такой порядок определён. Исключения, выброшенные действием, передаются вызывающему коду.

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

Переопределено из:
forEach в интерфейсе Iterable<E>
Параметры:
action — действие, выполняемое для каждого элемента
Исключения:
NullPointerException — если указанное действие равно null

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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/ConcurrentLinkedQueue.html

Spec-Zone.ru

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