Класс 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(Collection), removeIf(Predicate) или forEach(Consumer), не гарантируется выполнять атомарно. Например, обход 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 |
Передаёт элемент потребителю, если это возможно до истечения времени ожидания. |
Методы, объявленные в классе AbstractQueue
addAll, clear, element, remove
Методы, объявленные в классе AbstractCollection
containsAll, toString
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе 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 на основе массивов и API на основе коллекций.
- Указано в:
-
toArrayв интерфейсеCollection<E> - Переопределено:
-
toArrayв классеAbstractCollection<E> - Возвращает:
- массив, содержащий все элементы этой очереди
toArray
public <T> T[] toArray(T[] a)
Если очередь помещается в указанный массив с запасом места (то есть массив содержит больше элементов, чем эта очередь), элемент массива, расположенный сразу после конца очереди, устанавливается в null.
Как и метод toArray(), этот метод служит связующим звеном между API на основе массивов и 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.
- Указано в:
-
tryTransferв интерфейсеTransferQueue<E> - Параметры:
-
e— передаваемый элемент -
timeout— время ожидания до отказа от попытки, в единицахunit -
unit—TimeUnit, определяющий способ интерпретации параметраtimeout - Возвращает:
-
trueв случае успеха илиfalse, если указанное время ожидания истекло до завершения; в этом случае элемент не остается в очереди - Вызывает исключение:
-
NullPointerException— если указанный элемент равен null -
InterruptedException— если ожидание было прервано; в этом случае элемент не остается в очереди
take
public E take() throws InterruptedException
BlockingQueue- Указано в:
-
takeв интерфейсеBlockingQueue<E> - Возвращает:
- начало этой очереди
- Вызывает исключение:
-
InterruptedException— если ожидание было прервано
poll
public E poll(long timeout, TimeUnit unit) throws InterruptedException
BlockingQueue- Указано в:
-
pollв интерфейсеBlockingQueue<E> - Параметры:
-
timeout— время ожидания до отказа от попытки, в единицахunit -
unit—TimeUnit, определяющий способ интерпретации параметраtimeout - Возвращает:
- начало этой очереди или
null, если указанное время ожидания истекло до появления элемента - Вызывает исключение:
-
InterruptedException— если ожидание было прервано
poll
drainTo
public int drainTo(Collection<? super E> c)
BlockingQueuec может привести к тому, что при возникновении связанного исключения элементы не будут находиться ни в одной коллекции, будут находиться в одной из них или в обеих. Попытка очистить очередь в саму себя приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.- Указано в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую нужно перенести элементы - Возвращает:
- количество перенесенных элементов
- Вызывает исключение:
-
NullPointerException— если указанная коллекция равна null -
IllegalArgumentException— если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди препятствует его добавлению в указанную коллекцию
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueuec может привести к тому, что при возникновении связанного исключения элементы не будут находиться ни в одной коллекции, будут находиться в одной из них или в обеих. Попытка очистить очередь в саму себя приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.- Указано в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую нужно перенести элементы -
maxElements— максимальное количество переносимых элементов - Возвращает:
- количество перенесенных элементов
- Вызывает исключение:
-
NullPointerException— если указанная коллекция равна null -
IllegalArgumentException— если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди препятствует его добавлению в указанную коллекцию
iterator
public Iterator<E> iterator()
Возвращенный итератор является слабо согласованным.
- Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв интерфейсеIterable<E> - Указано в:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам этой очереди в правильном порядке
peek
isEmpty
public boolean isEmpty()
true, если эта очередь не содержит элементов.- Указано в:
-
isEmptyв интерфейсеCollection<E> - Переопределено:
-
isEmptyв классеAbstractCollection<E> - Возвращает:
-
true, если эта очередь не содержит элементов
hasWaitingConsumer
public boolean hasWaitingConsumer()
TransferQueuetrue, если хотя бы один потребитель ожидает получения элемента с помощью BlockingQueue.take() или poll с тайм-аутом. Возвращаемое значение отражает состояние на конкретный момент времени.- Указано в:
-
hasWaitingConsumerв интерфейсеTransferQueue<E> - Возвращает:
-
true, если есть хотя бы один ожидающий потребитель
size
public int size()
Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE. Обратите внимание: в отличие от большинства коллекций, этот метод НЕ выполняется за постоянное время. Из-за асинхронной природы этих очередей для определения текущего количества элементов требуется обход за O(n).
- Указано в:
-
sizeв интерфейсеCollection<E> - Возвращает:
- количество элементов в этой очереди
getWaitingConsumerCount
public int getWaitingConsumerCount()
TransferQueueBlockingQueue.take() или poll с тайм-аутом. Возвращаемое значение приблизительно отражает состояние на конкретный момент времени и может быть неточным, если потребители завершили ожидание или отказались от него. Значение может быть полезно для мониторинга и эвристик, но не для управления синхронизацией. Реализации этого метода, вероятно, будут заметно медленнее, чем реализации метода TransferQueue.hasWaitingConsumer().- Указано в:
-
getWaitingConsumerCountв интерфейсеTransferQueue<E> - Возвращает:
- количество потребителей, ожидающих получения элементов
remove
public boolean remove(Object o)
e, такой что o.equals(e), если очередь содержит один или несколько таких элементов. Возвращает true, если очередь содержала указанный элемент (или, что эквивалентно, если очередь изменилась в результате вызова).- Указано в:
-
removeв интерфейсеBlockingQueue<E> - Указано в:
-
removeв интерфейсеCollection<E> - Переопределено:
-
removeв классеAbstractCollection<E> - Параметры:
-
o— элемент, который нужно удалить из этой очереди, если он присутствует - Возвращает:
-
true, если эта очередь изменилась в результате вызова
contains
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 - См. также:
clear
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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/LinkedTransferQueue.html