Класс 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 |
Создаёт 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
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()
Queuenull если эта очередь пуста.- Specified by:
-
pollв интерфейсеQueue<E> - Returns:
- голова этой очереди, или
nullесли эта очередь пуста
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
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если эта очередь не содержит элементов
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, 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