Класс ConcurrentLinkedQueue<E>
- Параметры типа:
E— тип элементов, хранящихся в этой очереди
- Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, Queue<E>
public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> implements Queue<E>, Serializable
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 |
Создаёт ConcurrentLinkedQueue, изначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Вставляет указанный элемент в хвост этой очереди. |
boolean |
addAll |
Добавляет все элементы указанной коллекции в конец этой очереди в том порядке, в котором их возвращает итератор указанной коллекции. |
void |
clear() |
Удаляет все элементы из этой очереди. |
boolean |
contains |
Возвращает true, если эта очередь содержит указанный элемент. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение. |
boolean |
isEmpty() |
Возвращает true, если эта очередь не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам этой очереди в надлежащем порядке. |
boolean |
offer |
Вставляет указанный элемент в хвост этой очереди. |
E |
peek() |
Извлекает, но не удаляет голову этой очереди или возвращает null, если очередь пуста. |
E |
poll() |
Извлекает и удаляет голову этой очереди или возвращает null, если очередь пуста. |
boolean |
remove |
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean |
removeAll |
Удаляет из этой коллекции все элементы, которые также содержатся в указанной коллекции (необязательная операция). |
boolean |
removeIf |
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция). |
boolean |
retainAll |
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой очереди. |
Spliterator |
spliterator() |
Возвращает Spliterator для элементов этой очереди. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке; тип возвращённого массива во время выполнения совпадает с типом указанного массива. |
Методы, объявленные в классе 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
Подробное описание конструкторов
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
peek
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— если указанная коллекция является этой очередью - См. также:
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 - См. также:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Переопределено из:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует оставить в этой коллекции - Возвращает:
-
true, если эта коллекция изменилась в результате вызова - Исключения:
-
NullPointerException— если эта коллекция содержит один или несколько элементов null, а указанная коллекция не допускает элементы null (необязательно), или если указанная коллекция равна null - См. также:
clear
public void clear()
AbstractQueueЭта реализация многократно вызывает poll, пока он не вернёт null.
- Переопределено из:
-
clearв интерфейсеCollection<E> - Переопределяет:
-
clearв классеAbstractQueue<E>
forEach
public void forEach(Consumer<? super E> action)
IterableIterable, пока не будут обработаны все элементы или действие не выбросит исключение. Действия выполняются в порядке итерации, если такой порядок определён. Исключения, выброшенные действием, передаются вызывающему коду. Поведение этого метода не определено, если действие выполняет побочные эффекты, изменяющие источник элементов, если только переопределяющий класс не определил политику конкурентного изменения.
- Переопределено из:
-
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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ConcurrentLinkedQueue.html