Класс ConcurrentLinkedQueue<E>
- Параметры типа:
-
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<E> |
iterator() |
Возвращает итератор по элементам этой очереди в правильном порядке. |
boolean |
offer |
Вставляет указанный элемент в конец этой очереди. |
E |
peek() |
Извлекает, но не удаляет, голову этой очереди или возвращает null, если очередь пуста. |
E |
poll() |
Извлекает и удаляет голову этой очереди или возвращает null, если очередь пуста. |
boolean |
remove |
Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean |
removeAll |
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
boolean |
removeIf |
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату. |
boolean |
retainAll |
Сохраняет только элементы этой коллекции, которые содержатся в указанной коллекции (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой очереди. |
Spliterator<E> |
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
public ConcurrentLinkedQueue(Collection<? extends E> c)
- Parameters:
-
c- набор элементов, которые должны содержаться в очереди изначально - Throws:
-
NullPointerException- если указанный набор или любой из его элементов равны null
Подробное описание методов
add
public boolean add(E e)
IllegalStateException или не вернёт false.- Specified by:
-
addв интерфейсеCollection<E> - Specified by:
-
addв интерфейсеQueue<E> - Overrides:
-
addв классеAbstractQueue<E> - Parameters:
-
e- элемент для добавления - Returns:
-
true(как указано вCollection.add(E)) - Throws:
-
NullPointerException- если указанный элемент равен null
offer
public boolean offer(E e)
false.- Specified by:
-
offerв интерфейсеQueue<E> - Parameters:
-
e- элемент для добавления - Returns:
-
true(как указано вQueue.offer(E)) - Throws:
-
NullPointerException- если указанный элемент равен null
poll
public E poll()
Queuenull если эта очередь пуста.- Specified by:
-
pollв интерфейсеQueue<E> - Returns:
- голова этой очереди или
nullесли эта очередь пуста
peek
public E peek()
Queuenull если эта очередь пуста.- Specified by:
-
peekв интерфейсеQueue<E> - Returns:
- голова этой очереди или
nullесли эта очередь пуста
isEmpty
public boolean isEmpty()
true если эта очередь не содержит элементов.- Specified by:
-
isEmptyв интерфейсеCollection<E> - Overrides:
-
isEmptyв классеAbstractCollection<E> - Returns:
-
trueесли эта очередь не содержит элементов
size
public int size()
Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE. Обратите внимание, что, в отличие от большинства коллекций, этот метод НЕ является операцией с постоянной сложностью. Из-за асинхронного характера этих очередей определение текущего количества элементов требует O(n) обхода. Кроме того, если элементы добавляются или удаляются во время выполнения этого метода, возвращаемый результат может быть неточным. Таким образом, этот метод обычно не очень полезен в многопоточных приложениях.
- Specified by:
-
sizeв интерфейсеCollection<E> - Returns:
- количество элементов в этой очереди
contains
public boolean contains(Object o)
true если эта очередь содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда эта очередь содержит по крайней мере один элемент e такой, что o.equals(e).- Specified by:
-
containsв интерфейсеCollection<E> - Overrides:
-
containsв классеAbstractCollection<E> - Parameters:
-
o- объект, проверяемый на наличие в этой очереди - Returns:
-
trueесли эта очередь содержит указанный элемент
remove
public boolean remove(Object o)
e такой, что o.equals(e), если эта очередь содержит один или несколько таких элементов. Возвращает true если эта очередь содержала указанный элемент (или, эквивалентно, если эта очередь изменилась в результате вызова).- Specified by:
-
removeв интерфейсеCollection<E> - Overrides:
-
removeв классеAbstractCollection<E> - Parameters:
-
o- элемент, который необходимо удалить из этой очереди, если он присутствует - Returns:
-
trueесли эта очередь изменилась в результате вызова
addAll
public boolean addAll(Collection<? extends E> c)
IllegalArgumentException.- Specified by:
-
addAllв интерфейсеCollection<E> - Overrides:
-
addAllв классеAbstractQueue<E> - Parameters:
-
c- элементы, которые необходимо вставить в эту очередь - Returns:
-
trueесли эта очередь изменилась в результате вызова - Throws:
-
NullPointerException- если заданный набор или любой из его элементов равны null -
IllegalArgumentException- если набор - это эта очередь - See Also:
toArray
public Object[] toArray()
Возвращаемый массив будет "безопасным", так как к нему не сохраняются ссылки этой очередью. (Другими словами, этот метод должен выделить новый массив). Таким образом, вызывающая сторона свободно может изменять возвращаемый массив.
Этот метод служит мостом между основанными на массивах и коллекционных API.
- Specified by:
-
toArrayв интерфейсеCollection<E> - Overrides:
-
toArrayв классеAbstractCollection<E> - Returns:
- массив, содержащий все элементы этой очереди
toArray
public <T> T[] toArray(T[] a)
Если эта очередь помещается в указанный массив с избыточным пространством (т. е. массив имеет больше элементов, чем эта очередь), элемент в массиве непосредственно после конца очереди устанавливается в null.
Как и метод toArray(), этот метод служит мостом между основанными на массивах и основанными на коллекциях API. Кроме того, этот метод позволяет точно управлять типом времени выполнения выходного массива и может в определённых обстоятельствах использоваться для экономии затрат на выделение памяти.
Предположим, что x — это очередь, известная тем, что содержит только строки. Следующий код может быть использован для выгрузки очереди в новый выделенный массив типа String:
String[] y = x.toArray(new String[0]); Обратите внимание, что toArray(new Object[0]) эквивалентно toArray().- Specified by:
-
toArrayв интерфейсеCollection<E> - Overrides:
-
toArrayв классеAbstractCollection<E> - Type Parameters:
-
T- тип компонента массива для хранения коллекции - Parameters:
-
a- массив, в который должны быть сохранены элементы очереди, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа времени выполнения - Returns:
- массив, содержащий все элементы этой очереди
- Throws:
-
ArrayStoreException- если тип времени выполнения указанного массива не является супертипом типа времени выполнения каждого элемента в этой очереди -
NullPointerException- если указанный массив равен null
iterator
public Iterator<E> iterator()
Возвращаемый итератор является слабо согласованным.
- Specified by:
-
iteratorв интерфейсеCollection<E> - Specified by:
-
iteratorв интерфейсеIterable<E> - Specified by:
-
iteratorв классеAbstractCollection<E> - Returns:
- итератор по элементам в этой очереди в правильной последовательности
spliterator
public Spliterator<E> spliterator()
Spliterator над элементами в этой очереди. Возвращаемый spliterator является слабо согласованным.
Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.
- Specified by:
-
spliteratorв интерфейсеCollection<E> - Specified by:
-
spliteratorв интерфейсеIterable<E> - Implementation Note:
SpliteratorреализуетtrySplitдля разрешения ограниченного параллелизма.- Returns:
Spliteratorнад элементами в этой очереди- Since:
- 1.8
removeIf
public boolean removeIf(Predicate<? super E> filter)
Collection- Specified by:
-
removeIfв интерфейсеCollection<E> - Parameters:
-
filter- предикат, который возвращаетtrueдля удаляемых элементов - Returns:
-
trueесли какие-либо элементы были удалены - Throws:
-
NullPointerException- если указанный фильтр равен null
removeAll
public boolean removeAll(Collection<?> c)
AbstractCollection- Specified by:
-
removeAllв интерфейсеCollection<E> - Overrides:
-
removeAllв классеAbstractCollection<E> - Parameters:
-
c- набор, содержащий элементы, которые нужно удалить из этого набора - Returns:
-
trueесли этот набор изменился в результате вызова - Throws:
-
NullPointerException- если этот набор содержит один или несколько null-элементов, а указанный набор не поддерживает null-элементы (необязательно), или если указанный набор равен null - See Also:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Specified by:
-
retainAllв интерфейсеCollection<E> - Overrides:
-
retainAllв классеAbstractCollection<E> - Parameters:
-
c- набор, содержащий элементы, которые нужно сохранить в этом наборе - Returns:
-
trueесли этот набор изменился в результате вызова - Throws:
-
NullPointerException- если этот набор содержит один или несколько null-элементов, а указанный набор не допускает null-элементов (необязательно), или если указанный набор равен null - See Also:
clear
public void clear()
AbstractQueueЭта реализация многократно вызывает poll до тех пор, пока не вернет null.
- Specified by:
-
clearв интерфейсеCollection<E> - Overrides:
-
clearв классеAbstractQueue<E>
forEach
public void forEach(Consumer<? super E> action)
IterableIterable до тех пор, пока все элементы не будут обработаны или действие не вызовет исключение. Действия выполняются в порядке итерации, если этот порядок указан. Исключение, сгенерированное действием, передаётся вызывающему объекту. Поведение этого метода не определено, если действие выполняет побочные эффекты, которые изменяют основной источник элементов, если только в переопределяемом классе не указана политика одновременного изменения.
- Specified by:
-
forEachв интерфейсеIterable<E> - Parameters:
-
action- Действие, которое должно выполняться для каждого элемента - Throws:
-
NullPointerException- если указанное действие равно null
© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/ConcurrentLinkedQueue.html