Spec-Zone.ru › OpenJDK 24

Класс LinkedTransferQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.LinkedTransferQueue<E>
Параметры типа:
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.

С момента:
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.

LinkedTransferQueue

public LinkedTransferQueue(Collection<? extends E> c)
Создаёт LinkedTransferQueue, содержащую элементы заданного набора, добавленные в порядке обхода итератора набора.
Параметры:
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.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
Удаляет все доступные элементы из этой очереди и добавляет их в заданный набор. Эта операция может быть более эффективной, чем многократное вызов poll. Возникшая ошибка при попытке добавить элементы в коллекцию 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, 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/LinkedTransferQueue.html

Spec-Zone.ru

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