Класс ConcurrentLinkedQueue<E>
- Type Parameters:
-
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(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.
- Since:
- 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
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 на основе массивов и API на основе коллекций.
- Specified by:
-
toArrayв интерфейсеCollection<E> - Overrides:
-
toArrayв классеAbstractCollection<E> - Returns:
- массив, содержащий все элементы в этой очереди
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().- 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.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, 2023, 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/21/docs/api/java.base/java/util/concurrent/ConcurrentLinkedQueue.html