Spec-Zone.ru › OpenJDK 24

Класс ConcurrentLinkedQueue<E>

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

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

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

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

Операции по работе с блоками, добавляющие, удаляющие или проверяющие несколько элементов, такие как addAll(java.util.Collection<? extends E>), removeIf(java.util.function.Predicate<? super E>) или forEach(java.util.function.Consumer<? super E>), не гарантируются как выполняемые атомарно. Например, обход 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)
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип времени выполнения возвращаемого массива — указанный массив.

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

clear, element, remove

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

containsAll, toString

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

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

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

containsAll, equals, hashCode, parallelStream, stream, toArray

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

element, remove
END_OF_DOCUMENT_MARKER

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

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.

Унаследовано от:
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

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

retainAll

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ConcurrentLinkedQueue.html

Spec-Zone.ru

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