Класс 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.

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

Конструкторы

Конструктор Описание
LinkedTransferQueue()

Создаёт пустую LinkedTransferQueue.

LinkedTransferQueue​(Collection<? extends E> c)

Создаёт LinkedTransferQueue, изначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.

Методы

Модификатор и тип Метод Описание
boolean add​(E e)

Вставляет указанный элемент в конец этой очереди.

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 до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение.

boolean isEmpty()

Возвращает true, если эта очередь не содержит элементов.

Iterator<E> iterator()

Возвращает итератор по элементам в этой очереди в правильном порядке.

boolean offer​(E e)

Вставляет указанный элемент в конец этой очереди.

boolean offer​(E e, 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 по элементам в этой очереди.

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.concurrent.BlockingQueue

poll, take

Методы, объявленные в интерфейсе java.util.Collection

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

Методы, объявленные в интерфейсе java.util.Queue

element, peek, poll, remove

Методы, объявленные в интерфейсе java.util.concurrent.TransferQueue

getWaitingConsumerCount, hasWaitingConsumer

Конструкторы

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)

Непосредственно передает элемент ожидающему потребителю, если это возможно.

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

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

transfer

public void transfer(E e)
              throws InterruptedException

Передает элемент потребителю, ожидая, если это необходимо.

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

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

tryTransfer

public boolean tryTransfer(E e,
                           long timeout,
                           TimeUnit unit)
                    throws InterruptedException

Передает элемент потребителю, если это возможно до истечения срока ожидания.

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

Определено в:
tryTransfer в интерфейсе TransferQueue<E>
Параметры:
e — элемент для передачи
timeout — время ожидания, прежде чем отказаться, в единицах unit
unit — TimeUnit, определяющий, как интерпретировать параметр timeout
Возвращает:
true если успешно, или false если заданное время ожидания истекает до завершения, в этом случае элемент не остается в очереди
ИИсключения:
NullPointerException — если указанный элемент равен null
InterruptedException — если прервано во время ожидания, в этом случае элемент не остается в очереди

drainTo

public int drainTo(Collection<? super E> c)

Описание скопировано из интерфейса: BlockingQueue

Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. Эта операция может быть более эффективной, чем многократное опрощение этой очереди. Ошибка, возникшая при попытке добавить элементы в коллекцию c, может привести к тому, что элементы окажутся ни в той, ни в другой, ни в той, ни в другой, или в обеих коллекциях, когда возникает соответствующее исключение. Попытки слить очередь в неё же приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции.

Определено в:
drainTo в интерфейсе BlockingQueue<E>
Параметры:
c — коллекция для передачи элементов
Возвращает:
количество переданных элементов
ИИсключения:
NullPointerException — если указанная коллекция равна null
IllegalArgumentException — если указанная коллекция — это эта очередь или некоторые свойства элемента этой очереди препятствуют его добавлению в указанную коллекцию

drainTo

public int drainTo(Collection<? super E> c,
                   int maxElements)

Описание скопировано из интерфейса: BlockingQueue

Удаляет не более заданного числа доступных элементов из этой очереди и добавляет их в заданную коллекцию. Ошибка, возникшая при попытке добавить элементы в коллекцию c может привести к тому, что элементы окажутся ни в одной, ни в другой, ни в той, ни в другой коллекциях, или в обеих, когда будет выброшено соответствующее исключение. Попытки слить очередь в саму себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция модифицируется во время выполнения операции.

Определено в:
drainTo в интерфейсе BlockingQueue<E>
Параметры:
c - коллекция, в которую нужно перенести элементы
maxElements - максимальное количество элементов для переноса
Возвращает:
количество перенесённых элементов
Исключение:
NullPointerException - если указанная коллекция равна null
IllegalArgumentException - если указанная коллекция является этой очередью или какое-то свойство элемента этой очереди препятствует его добавлению в указанную коллекцию

iterator

public Iterator<E> iterator()

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

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

Определено в:
iterator в интерфейсе Collection<E>
Определено в:
iterator в интерфейсе Iterable<E>
Определено в:
iterator в классе AbstractCollection<E>
Возвращает:
итератор по элементам в этой очереди в правильном порядке

isEmpty

public boolean isEmpty()

Возвращает true если эта очередь не содержит элементов.

Определено в:
isEmpty в интерфейсе Collection<E>
Переопределяет:
isEmpty в классе AbstractCollection<E>
Возвращает:
true если эта очередь не содержит элементов

size

public int size()

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

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

Определено в:
size в интерфейсе Collection<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
См. также:
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)

forEach

public void forEach(Consumer<? super E> action)

Описание скопировано из интерфейса: Iterable

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

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

Определено в:
forEach в интерфейсе Iterable<E>
Параметры:
action - действие, которое нужно выполнить для каждого элемента
Исключение:
NullPointerException - если указанное действие равно null

© 1993, 2020, 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/11/docs/api/java.base/java/util/concurrent/LinkedTransferQueue.html

Spec-Zone .ru
спецификации, руководства, описания, API