Класс LinkedTransferQueue<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.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(Collection<? extends E> c) | Создаёт |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | add(E e) | Вставляет указанный элемент в конец этой очереди. |
boolean | contains(Object o) | Возвращает |
int | drainTo(Collection<? super E> c) | Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. |
int | drainTo(Collection<? super E> c,
int maxElements) | Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию. |
void | forEach(Consumer<? super E> action) | Выполняет заданное действие для каждого элемента |
boolean | isEmpty() | Возвращает |
Iterator<E> | iterator() | Возвращает итератор по элементам в этой очереди в правильном порядке. |
boolean | offer(E e) | Вставляет указанный элемент в конец этой очереди. |
boolean | offer(E e,
long timeout,
TimeUnit unit) | Вставляет указанный элемент в конец этой очереди. |
void | put(E e) | Вставляет указанный элемент в конец этой очереди. |
int | remainingCapacity() | Всегда возвращает |
boolean | remove(Object o) | Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean | removeAll(Collection<?> c) | Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
boolean | removeIf(Predicate<? super E> filter) | Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату. |
boolean | retainAll(Collection<?> c) | Оставляет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция). |
int | size() | Возвращает количество элементов в этой очереди. |
Spliterator<E> | 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