Spec-Zone.ru › OpenJDK 8

Класс ConcurrentLinkedQueue<E>

  • java.lang.Object
    • java.util.AbstractCollection<E>
      • java.util.AbstractQueue<E>
        • java.util.concurrent.ConcurrentLinkedQueue<E>
Type Parameters:
E - тип элементов, хранящихся в этой коллекции
Все реализованные интерфейсы:
Serializable, Iterable<E>, Collection<E>, Queue<E>

public class ConcurrentLinkedQueue<E>
extends AbstractQueue<E>
implements Queue<E>, Serializable

Безопасная для потоков неограниченная очередь, основанная на связанных узлах. Эта очередь упорядочивает элементы по принципу FIFO (первым пришёл — первым вышел). Голова очереди — это элемент, который находился в очереди дольше всего. Хвост очереди — это элемент, который находился в очереди меньше всего времени. Новые элементы вставляются в конец очереди, а операции извлечения элементов из очереди получают элементы с начала очереди. Очередь является подходящим выбором, когда много потоков будут совместно использовать доступ к одной общей коллекции. Как и большинство других реализаций коллекций для многопоточных задач, этот класс не допускает использование null элементов.

Эта реализация использует эффективный алгоритм без блокировки, основанный на описанном в Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms Майклом М. Майклом и Майклом Л. Скоттом.

Итераторы слабо согласованы, возвращая элементы, отражающие состояние очереди в какой-то момент времени или после создания итератора. Они не выбрасывают исключение ConcurrentModificationException, и могут продолжать свою работу параллельно с другими операциями. Элементы, присутствующие в очереди со времени создания итератора, будут возвращены ровно один раз.

Обратите внимание, что, в отличие от большинства коллекций, метод size является НЕ операцией с постоянной сложностью. Из-за асинхронной природы этих очередей, определение текущего количества элементов требует обхода элементов, и поэтому может сообщать неточные результаты, если эта коллекция изменяется во время обхода. Кроме того, массовые операции addAll, removeAll, retainAll, containsAll, equals, и toArray не гарантируются, что будут выполнены атомарно. Например, итератор, работающий параллельно с операцией addAll, может увидеть только некоторые добавленные элементы.

Этот класс и его итератор реализуют все необязательные методы интерфейсов Queue и Iterator.

Влияние согласованности памяти: как и в других коллекциях для многопоточных задач, действия в потоке до размещения объекта в ConcurrentLinkedQueue очереди предшествуют последующим действиям доступа или удаления этого элемента из ConcurrentLinkedQueue в другом потоке.

Этот класс является членом Java Collections Framework.

Since:
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, если эта очередь содержит указанный элемент.

boolean isEmpty()

Возвращает true, если эта очередь не содержит элементов.

Iterator<E> iterator()

Возвращает итератор по элементам в этой очереди в правильной последовательности.

boolean offer(E e)

Вставляет указанный элемент в конец этой очереди.

E peek()

Извлекает, но не удаляет, голову этой очереди или возвращает null, если эта очередь пуста.

E poll()

Извлекает и удаляет голову этой очереди или возвращает null, если эта очередь пуста.

boolean remove(Object o)

Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует.

int size()

Возвращает количество элементов в этой очереди.

Spliterator<E> spliterator()

Возвращает Spliterator по элементам в этой очереди.

Object[] toArray()

Возвращает массив, содержащий все элементы этой очереди в правильной последовательности.

<T> T[] toArray(T[] a)

Возвращает массив, содержащий все элементы этой очереди в правильной последовательности; тип возвращаемого массива соответствует указанному массиву.

Методы, унаследованные от класса java.util.AbstractQueue

clear, element, remove

Методы, унаследованные от класса java.util.AbstractCollection

containsAll, removeAll, retainAll, toString

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Методы, унаследованные от интерфейса java.util.Queue

element, remove

Методы, унаследованные от интерфейса java.util.Collection

clear, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, stream

Методы, унаследованные от интерфейса java.lang.Iterable

forEach

Конструкторы

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>
Определено в:
size в классе AbstractCollection<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.

Определено в:
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 в интерфейсе Iterable<E>
Определено в:
iterator в интерфейсе Collection<E>
Определено в:
iterator в классе AbstractCollection<E>
Возвращает:
итератор по элементам этой очереди в правильной последовательности

spliterator

public Spliterator<E> spliterator()

Возвращает Spliterator по элементам этой очереди.

Возвращаемый разделитель слабо согласован.

Разделитель Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.

Определено в:
spliterator в интерфейсе Iterable<E>
Определено в:
spliterator в интерфейсе Collection<E>
Примечание для реализации:
Разделитель Spliterator реализует trySplit для допуска ограниченного параллелизма.
Возвращает:
разделитель Spliterator по элементам этой очереди
С:
1.8

© 1993, 2020, 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