Класс ConcurrentLinkedQueue<E>
- Type Parameters:
E- тип элементов, хранящихся в этой очереди
- Все реализованные интерфейсы:
-
Serializable,Iterable<E>,Collection<E>,Queue<E>
public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> implements Queue<E>, Serializable
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 |
Создает 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 |
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип времени выполнения возвращаемого массива — указанный массив. |
Методы, объявленные в классе 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
Подробное описание конструкторов
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.
- Унаследовано от:
-
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 - См. также:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Определено в:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c- набор, содержащий элементы, которые должны быть сохранены в этом наборе - Возвращает:
-
true, если этот набор изменился в результате вызова - Исключения:
-
NullPointerException- если этот набор содержит один или несколько нулевых элементов, а указанный набор не допускает нулевые элементы (необязательное) или если указанный набор равен 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ConcurrentLinkedQueue.html