Класс 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 |
Создаёт LinkedTransferQueue, изначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Вставляет указанный элемент в хвост этой очереди. |
void |
clear() |
Удаляет все элементы из этой очереди. |
boolean |
contains |
Возвращает true, если эта очередь содержит указанный элемент. |
int |
drainTo |
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. |
int |
drainTo |
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока все элементы не будут обработаны или действие не выбросит исключение. |
int |
getWaitingConsumerCount() |
Возвращает оценку числа потребителей, ожидающих получения элементов через BlockingQueue.take() или временный poll. |
boolean |
hasWaitingConsumer() |
Возвращает true, если есть хотя бы один потребитель, ожидающий получения элемента через BlockingQueue.take() или временный poll. |
boolean |
isEmpty() |
Возвращает true, если эта очередь не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам в этой очереди в правильном порядке. |
boolean |
offer |
Вставляет указанный элемент в хвост этой очереди. |
boolean |
offer |
Вставляет указанный элемент в хвост этой очереди. |
E |
peek() |
Возвращает голову этой очереди, но не удаляет ее, или возвращает null, если эта очередь пуста. |
E |
poll() |
Возвращает и удаляет голову этой очереди, или возвращает null, если эта очередь пуста. |
E |
poll |
Возвращает и удаляет голову этой очереди, ожидая в течение указанного времени, если необходимо, чтобы элемент стал доступным. |
void |
put |
Вставляет указанный элемент в хвост этой очереди. |
int |
remainingCapacity() |
Всегда возвращает Integer.MAX_VALUE, потому что LinkedTransferQueue не ограничена по емкости. |
boolean |
remove |
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean |
removeAll |
Удаляет все элементы этой коллекции, которые также содержатся в заданной коллекции (необязательная операция). |
boolean |
removeIf |
Удаляет все элементы этой коллекции, которые удовлетворяют заданному предикату (необязательная операция). |
boolean |
retainAll |
Сохраняет только элементы в этой коллекции, которые содержатся в заданной коллекции (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой очереди. |
Spliterator |
spliterator() |
Возвращает Spliterator по элементам в этой очереди. |
E |
take() |
Возвращает и удаляет голову этой очереди, ожидая, если необходимо, пока элемент станет доступным. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой очереди в правильном порядке. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой очереди в правильном порядке; тип времени выполнения возвращаемого массива соответствует типу указанного массива. |
void |
transfer |
Переносит элемент к потребителю, ожидая, если необходимо. |
boolean |
tryTransfer |
Немедленно переносит элемент к ожидающему потребителю, если это возможно. |
boolean |
tryTransfer |
Переносит элемент к потребителю, если это возможно до истечения срока ожидания. |
Методы, объявленные в классе 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
Подробное описание конструкторов
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
drainTo
public int drainTo(Collection<? super E> c)
BlockingQueuec может привести к тому, что элементы окажутся ни в одной, ни в той, ни в другой коллекции, когда будет брошено соответствующее исключение. Попытки слить очередь в саму себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если заданная коллекция модифицируется во время выполнения операции.- Specified by:
-
drainToв интерфейсеBlockingQueue<E> - Parameters:
-
c- коллекция для переноса элементов - Returns:
- количество переданных элементов
- Throws:
-
NullPointerException- если заданная коллекция имеет значение null -
IllegalArgumentException- если заданная коллекция — это эта очередь или какое-либо свойство элемента этой очереди препятствует его добавлению в заданную коллекцию
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueuec может привести к тому, что элементы окажутся ни в одной, ни в той, ни в другой коллекции, когда будет брошено соответствующее исключение. Попытки слить очередь в саму себя приводят к 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
isEmpty
public boolean isEmpty()
true, если эта очередь не содержит элементов.- Specified by:
-
isEmptyв интерфейсеCollection<E> - Overrides:
-
isEmptyв классеAbstractCollection<E> - Returns:
-
true, если эта очередь не содержит элементов
hasWaitingConsumer
public boolean hasWaitingConsumer()
TransferQueuetrue, если существует хотя бы один потребитель, ожидающий получения элемента через 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()
TransferQueueBlockingQueue.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 - См. также:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Указано в:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c- набор, содержащий элементы, которые необходимо сохранить в этом наборе - Возвращает:
-
true, если этот набор изменился в результате вызова - Исключения:
-
NullPointerException- если этот набор содержит один или несколько null-элементов, а указанный набор не допускает null-элементов (необязательно), или если указанный набор равен null - См. также:
очистить
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, 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