Spec-Zone.ru › OpenJDK 27

Класс 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.

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

Итераторы являются слабо согласованными и возвращают элементы, отражающие состояние очереди в момент создания итератора или после него. Они не выбрасывают 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)
Добавляет все элементы указанной коллекции в конец этой очереди в том порядке, в котором их возвращает итератор указанной коллекции.
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
Модификатор и тип Метод Описание
void clear()
Удаляет все элементы из этой очереди.
E element()
Извлекает, но не удаляет голову этой очереди.
E remove()
Извлекает и удаляет голову этой очереди.

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

containsAll, toString
Модификатор и тип Метод Описание
boolean containsAll(Collection<?> c)
Возвращает true, если эта коллекция содержит все элементы указанной коллекции.
String toString()
Возвращает строковое представление этой коллекции.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс этого Object во время выполнения.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ждать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ждать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ждать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

equals, hashCode, parallelStream, stream, toArray
Модификатор и тип Метод Описание
boolean equals(Object o)
Сравнивает указанный объект с этой коллекцией на равенство.
int hashCode()
Возвращает значение хеш-кода этой коллекции.
default Stream<E> parallelStream()
Возвращает, возможно, параллельный Stream, источником которого является эта коллекция.
default Stream<E> stream()
Возвращает последовательный Stream, источником которого является эта коллекция.
default <T> T[] toArray(IntFunction<T[]> generator)
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator.

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

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)

forEach

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

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

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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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