Spec-Zone.ru › OpenJDK 21

Класс LinkedTransferQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.LinkedTransferQueue<E>
Type Parameters:
E - тип элементов, хранящихся в этой очереди
Все реализованные интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, TransferQueue<E>, Queue<E>
public class LinkedTransferQueue<E> extends AbstractQueue<E> implements TransferQueue<E>, Serializable
Неограниченная очередь TransferQueue на основе связанных узлов. Эта очередь упорядочивает элементы в порядке FIFO (первым пришёл — первым вышел) относительно каждого производителя. Голова очереди — это элемент, который был в очереди дольше всего для какого-либо производителя. Хвост очереди — это элемент, который был в очереди меньше всего времени для какого-либо производителя.

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

Массовые операции, добавляющие, удаляющие или проверяющие несколько элементов, такие как AbstractQueue.addAll(java.util.Collection<? extends E>), removeIf(java.util.function.Predicate<? super E>) или forEach(java.util.function.Consumer<? super E>), не гарантируются как выполняющиеся атомарно. Например, обход forEach одновременно с операцией addAll может наблюдать только некоторые добавленные элементы.

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

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

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

Since:
1.7
См. также:
  • Сериализованная форма

Краткое описание конструкторов

Конструктор Описание
LinkedTransferQueue()
Создаёт пустую LinkedTransferQueue.
LinkedTransferQueue(Collection<? extends E> c)
Создаёт LinkedTransferQueue, содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.

Краткое описание методов

Модификатор и тип Метод Описание
boolean add(E e)
Вставляет указанный элемент в конец этой очереди.
void clear()
Удаляет все элементы из этой очереди.
boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент.
int drainTo(Collection<? super E> c)
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию.
int drainTo(Collection<? super E> c, int maxElements)
Удаляет не более заданного числа доступных элементов из этой очереди и добавляет их в заданную коллекцию.
void forEach(Consumer<? super E> action)
Выполняет заданное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение.
int getWaitingConsumerCount()
Возвращает оценку количества потребителей, ожидающих получения элементов через BlockingQueue.take() или с таймаутом poll.
boolean hasWaitingConsumer()
Возвращает true , если по крайней мере один потребитель ожидает получения элемента через BlockingQueue.take() или с таймаутом poll.
boolean isEmpty()
Возвращает true , если эта очередь не содержит элементов.
Iterator<E> iterator()
Возвращает итератор по элементам в этой очереди в правильной последовательности.
boolean offer(E e)
Вставляет указанный элемент в конец этой очереди.
boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в конец этой очереди.
E peek()
Извлекает, но не удаляет, голову этой очереди или возвращает null , если эта очередь пуста.
E poll()
Извлекает и удаляет голову этой очереди или возвращает null , если эта очередь пуста.
E poll(long timeout, TimeUnit unit)
Извлекает и удаляет голову этой очереди, ожидая до указанного времени ожидания, если необходимо, пока элемент не станет доступным.
void put(E e)
Вставляет указанный элемент в конец этой очереди.
int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE , так как LinkedTransferQueue не ограничена по емкости.
boolean remove(Object o)
Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует.
boolean removeAll(Collection<?> c)
Удаляет все элементы этой коллекции, также содержащиеся в заданной коллекции (необязательная операция).
boolean removeIf(Predicate<? super E> filter)
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату.
boolean retainAll(Collection<?> c)
Сохраняет только элементы в этой коллекции, которые содержатся в заданной коллекции (необязательная операция).
int size()
Возвращает количество элементов в этой очереди.
Spliterator<E> spliterator()
Возвращает Spliterator по элементам в этой очереди.
E take()
Извлекает и удаляет голову этой очереди, ожидая, если необходимо, пока элемент не станет доступным.
Object[] toArray()
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип возвращаемого массива соответствует типу указанного массива.
void transfer(E e)
Передаёт элемент потребителю, ожидая, если необходимо.
boolean tryTransfer(E e)
Передаёт элемент ожидающему потребителю немедленно, если это возможно.
boolean tryTransfer(E e, long timeout, TimeUnit unit)
Передаёт элемент потребителю, если это возможно до истечения таймаута.

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

addAll, clear, element, remove

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

containsAll, toString

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

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

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

addAll, containsAll, equals, hashCode, parallelStream, stream, toArray

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

element, remove

Подробное описание конструкторов

LinkedTransferQueue

public LinkedTransferQueue()
Создаёт пустую очередь.

LinkedTransferQueue

public LinkedTransferQueue(Collection<? extends E> c)
Создаёт очередь, содержащую элементы заданного набора, добавленные в порядке обхода итератора набора.
Параметры:
c - набор элементов, которые должны первоначально содержаться в очереди
Исключения:
NullPointerException - если указанный набор или любой из его элементов равны null

Подробное описание методов

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

spliterator

public Spliterator<E> spliterator()
Возвращает Spliterator над элементами в этой очереди.

Возвращаемый spliterator является слабо согласованным.

Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.

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

put

public void put(E e)
Вставляет указанный элемент в конец этой очереди. Так как очередь не ограничена, этот метод никогда не заблокируется.
Указано в:
put в интерфейсе BlockingQueue<E>
Параметры:
e - элемент для добавления
Исключения:
NullPointerException - если указанный элемент равен null

offer

public boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в конец этой очереди. Так как очередь не ограничена, этот метод никогда не заблокируется и не вернёт false.
Указано в:
offer в интерфейсе BlockingQueue<E>
Параметры:
e - элемент для добавления
timeout - время ожидания, прежде чем отказаться, в единицах unit
unit - TimeUnit определяющий, как интерпретировать параметр timeout
Возвращает:
true (как указано в BlockingQueue.offer)
Исключения:
NullPointerException - если указанный элемент равен null

offer

public boolean offer(E e)
Вставляет указанный элемент в конец этой очереди. Так как очередь не ограничена, этот метод никогда не вернёт false.
Указано в:
offer в интерфейсе BlockingQueue<E>
Указано в:
offer в интерфейсе Queue<E>
Параметры:
e - элемент для добавления
Возвращает:
true (как указано в Queue.offer(E))
Исключения:
NullPointerException - если указанный элемент равен null

add

public boolean add(E e)
Вставляет указанный элемент в конец этой очереди. Так как очередь не ограничена, этот метод никогда не выбросит IllegalStateException и не вернёт false.
Указано в:
add в интерфейсе BlockingQueue<E>
Указано в:
add в интерфейсе Collection<E>
Указано в:
add в интерфейсе Queue<E>
Переопределяет:
add в классе AbstractQueue<E>
Параметры:
e - элемент для добавления
Возвращает:
true (как указано в Collection.add(E))
Исключения:
NullPointerException - если указанный элемент равен null

tryTransfer

public boolean tryTransfer(E e)
Немедленно передаёт элемент ожидающему потребителю, если это возможно.

Более точно, немедленно передаёт указанный элемент, если существует потребитель, уже ожидающий его получения (в take() или временном poll), в противном случае возвращает false без добавления элемента в очередь.

Указано в:
tryTransfer в интерфейсе TransferQueue<E>
Параметры:
e - элемент для передачи
Возвращает:
true если элемент был передан, иначе false
Исключения:
NullPointerException - если указанный элемент равен null

transfer

public void transfer(E e) throws InterruptedException
Передаёт элемент потребителю, ожидая, если это необходимо.

Более точно, немедленно передаёт указанный элемент, если существует потребитель, уже ожидающий его получения (в take() или в временном poll), в противном случае добавляет указанный элемент в конец этой очереди и ожидает, пока элемент не будет получен потребителем.

Указано в:
transfer в интерфейсе TransferQueue<E>
Параметры:
e - элемент для передачи
Исключения:
NullPointerException - если указанный элемент равен null
InterruptedException - если прервано ожидание, в этом случае элемент не оставляется в очереди

tryTransfer

public boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException
Переносит элемент к потребителю, если это возможно до истечения таймаута.

Более точно, переносит указанный элемент немедленно, если существует потребитель, уже ожидающий его получения (в take() или с таймаутом poll), в противном случае добавляет указанный элемент в конец очереди и ожидает, пока элемент не будет получен потребителем, возвращая false если указанное время ожидания истечёт до того, как элемент будет перенесён.

Specified by:
tryTransfer в интерфейсе TransferQueue<E>
Parameters:
e - элемент для переноса
timeout - время ожидания, прежде чем отказаться, в единицах unit
unit - TimeUnit определяющий, как интерпретировать параметр timeout
Returns:
true в случае успеха или false если указанное время ожидания истекает до завершения, в этом случае элемент не оставляется в очереди
Throws:
NullPointerException - если указанный элемент равен null
InterruptedException - если произошёл сбой при ожидании, в этом случае элемент не оставляется в очереди

take

public E take() throws InterruptedException
Описание, скопированное из интерфейса: BlockingQueue
Извлекает и удаляет голову этой очереди, ожидая, если необходимо, пока элемент не станет доступным.
Specified by:
take в интерфейсе BlockingQueue<E>
Returns:
голова этой очереди
Throws:
InterruptedException - если произошёл сбой при ожидании

poll

public E poll(long timeout, TimeUnit unit) throws InterruptedException
Описание, скопированное из интерфейса: BlockingQueue
Извлекает и удаляет голову этой очереди, ожидая до указанного времени ожидания, если необходимо, для того, чтобы элемент стал доступным.
Specified by:
poll в интерфейсе BlockingQueue<E>
Parameters:
timeout - время ожидания, прежде чем отказаться, в единицах unit
unit - TimeUnit определяющий, как интерпретировать параметр timeout
Returns:
голова этой очереди, или null если указанное время ожидания истекает, прежде чем элемент становится доступным
Throws:
InterruptedException - если произошёл сбой при ожидании

poll

public E poll()
Описание, скопированное из интерфейса: Queue
Извлекает и удаляет голову этой очереди, или возвращает null если эта очередь пуста.
Specified by:
poll в интерфейсе Queue<E>
Returns:
голова этой очереди, или null если эта очередь пуста

drainTo

public int drainTo(Collection<? super E> c)
Описание, скопированное из интерфейса: BlockingQueue
Удаляет все доступные элементы из этой очереди и добавляет их в заданный коллекцию. Эта операция может быть более эффективной, чем многократное опрошение этой очереди. Ошибка, возникшая при попытке добавить элементы в коллекцию c, может привести к тому, что элементы окажутся ни в одной, ни в той, ни в другой, или в обеих коллекциях, когда будет выброшено связанное исключение. Попытки слить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанный коллекция изменяется во время выполнения операции.
Specified by:
drainTo в интерфейсе BlockingQueue<E>
Parameters:
c - коллекция для переноса элементов
Returns:
количество перенесённых элементов
Throws:
NullPointerException - если указанная коллекция равна null
IllegalArgumentException - если указанный коллекция является этой очередью или какое-либо свойство элемента этой очереди препятствует его добавлению в указанную коллекцию

drainTo

public int drainTo(Collection<? super E> c, int maxElements)
Описание, скопированное из интерфейса: BlockingQueue
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданный коллекцию. Ошибка, возникшая при попытке добавить элементы в коллекцию c, может привести к тому, что элементы окажутся ни в одной, ни в той, ни в другой, или в обеих коллекциях, когда будет выброшено связанное исключение. Попытки слить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанный коллекция изменяется во время выполнения операции.
Specified by:
drainTo в интерфейсе BlockingQueue<E>
Parameters:
c - коллекция для переноса элементов
maxElements - максимальное количество элементов для переноса
Returns:
количество перенесённых элементов
Throws:
NullPointerException - если указанная коллекция равна null
IllegalArgumentException - если указанный коллекция является этой очередью или какое-либо свойство элемента этой очереди препятствует его добавлению в указанную коллекцию

iterator

public Iterator<E> iterator()
Возвращает итератор по элементам в этой очереди в правильной последовательности. Элементы будут возвращены в порядке от первого (головы) до последнего (хвоста).

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

Specified by:
iterator в интерфейсе Collection<E>
Specified by:
iterator в интерфейсе Iterable<E>
Specified by:
iterator в классе AbstractCollection<E>
Returns:
итератор по элементам в этой очереди в правильной последовательности

peek

public E peek()
Описание, скопированное из интерфейса: Queue
Извлекает, но не удаляет, голову этой очереди, или возвращает null если эта очередь пуста.
Specified by:
peek в интерфейсе Queue<E>
Returns:
голова этой очереди, или null если эта очередь пуста

isEmpty

public boolean isEmpty()
Возвращает true если эта очередь не содержит элементов.
Specified by:
isEmpty в интерфейсе Collection<E>
Overrides:
isEmpty в классе AbstractCollection<E>
Returns:
true если эта очередь не содержит элементов

hasWaitingConsumer

public boolean hasWaitingConsumer()
Описание, скопированное из интерфейса: TransferQueue
Возвращает true если существует хотя бы один ожидающий потребитель, чтобы получить элемент через BlockingQueue.take() или с таймаутом poll. Значение возврата представляет собой мгновенное состояние дел.
Specified by:
hasWaitingConsumer в интерфейсе TransferQueue<E>
Returns:
true если есть хотя бы один ожидающий потребитель

size

public int size()
Возвращает количество элементов в этой очереди. Если эта очередь содержит более Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.

Обратите внимание, что, в отличие от большинства коллекций, этот метод не является операцией с постоянным временем. Из-за асинхронной природы этих очередей, определение текущего количества элементов требует обхода O(n).

Specified by:
size в интерфейсе Collection<E>
Returns:
количество элементов в этой очереди

getWaitingConsumerCount

public int getWaitingConsumerCount()
Описание, скопированное из интерфейса: TransferQueue
Возвращает приблизительное количество потребителей, ожидающих получения элементов через BlockingQueue.take() или с таймаутом poll. Значение возврата является приближением мгновенного состояния дел, которое может быть неточным, если потребители завершили работу или отказались от ожидания. Значение может быть полезным для мониторинга и эвристики, но не для управления синхронизацией. Реализации этого метода, вероятно, будут заметно медленнее, чем для TransferQueue.hasWaitingConsumer().
Specified by:
getWaitingConsumerCount в интерфейсе TransferQueue<E>
Returns:
количество потребителей, ожидающих получения элементов

удалить

public boolean remove(Object o)
Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. Более формально, удаляет элемент e такой, что o.equals(e), если эта очередь содержит один или несколько таких элементов. Возвращает true если эта очередь содержала указанный элемент (или, что эквивалентно, если эта очередь изменилась в результате вызова).
Указано в:
remove в интерфейсе BlockingQueue<E>
Указано в:
remove в интерфейсе Collection<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o - элемент, который необходимо удалить из этой очереди, если он присутствует
Возвращает:
true если эта очередь изменилась в результате вызова

содержит

public boolean contains(Object o)
Возвращает true если эта очередь содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда эта очередь содержит по крайней мере один элемент e такой, что o.equals(e).
Указано в:
contains в интерфейсе BlockingQueue<E>
Указано в:
contains в интерфейсе Collection<E>
Переопределяет:
contains в классе AbstractCollection<E>
Параметры:
o - объект, который необходимо проверить на наличие в этой очереди
Возвращает:
true если эта очередь содержит указанный элемент

remainingCapacity

public int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE , потому что LinkedTransferQueue не ограничена по емкости.
Указано в:
remainingCapacity в интерфейсе BlockingQueue<E>
Возвращает:
Integer.MAX_VALUE (как указано в BlockingQueue.remainingCapacity())

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
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Сохраняет только элементы в этом наборе, которые содержатся в указанном наборе (необязательная операция). Другими словами, удаляет из этого набора все его элементы, которые не содержатся в указанном наборе.
Указано в:
retainAll в интерфейсе Collection<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c - набор, содержащий элементы, которые нужно сохранить в этом наборе
Возвращает:
true если этот набор изменился в результате вызова
Исключения:
NullPointerException - если этот набор содержит один или несколько null-элементов, а указанный набор не допускает null-элементов (необязательно) или если указанный набор равен null
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

очистить

public void clear()
Описание скопировано из класса: AbstractQueue
Удаляет все элементы из этой очереди. Очередь будет пустой после возврата этого вызова.

Это реализация многократно вызывает poll, пока не вернет null.

Указано в:
clear в интерфейсе Collection<E>
Переопределяет:
clear в классе AbstractQueue<E>

forEach

public void forEach(Consumer<? super E> action)
Описание скопировано из интерфейса: Iterable
Выполняет заданное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. Действия выполняются в порядке итерации, если этот порядок задан. Исключения, выброшенные действием, передаются вызывающей стороне.

Поведение этого метода не определено, если действие выполняет побочные эффекты, которые изменяют исходный источник элементов, если только переопределяемый класс не указал политику одновременного изменения.

Указано в:
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/LinkedTransferQueue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API