Класс 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 НЕ является операцией с постоянным временем. Из-за асинхронной природы этих очередей определение текущего количества элементов требует обхода элементов, и поэтому может сообщать неточные результаты, если эта коллекция изменяется во время обхода. Кроме того, массовые операции addAll, removeAll, retainAll, containsAll, equals, и toArray не гарантируются, что выполнятся атомарно. Например, итератор, работающий одновременно с операцией addAll, может увидеть только часть добавленных элементов.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Эффекты согласованности памяти: Как и в других конкурентных коллекциях, действия в потоке перед размещением объекта в LinkedTransferQueue происходят до последующих действий доступа или удаления этого элемента из LinkedTransferQueue в другом потоке.
Этот класс является частью Фреймворка Java Collections.
- С момента:
- 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) Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию. |
int |
getWaitingConsumerCount() Возвращает оценку количества потребителей, ожидающих получения элементов через |
boolean |
hasWaitingConsumer() Возвращает |
boolean |
isEmpty() Возвращает |
Iterator<E> |
iterator() Возвращает итератор по элементам в этой очереди в правильной последовательности. |
boolean |
offer(E e) Вставляет указанный элемент в конец этой очереди. |
boolean |
offer(E e,
long timeout,
TimeUnit unit) Вставляет указанный элемент в конец этой очереди. |
E |
peek() Возвращает голову этой очереди без удаления или |
E |
poll() Возвращает и удаляет голову этой очереди или |
E |
poll(long timeout,
TimeUnit unit) Возвращает и удаляет голову этой очереди, ожидая, если необходимо, до тех пор, пока элемент не станет доступным в течение указанного времени ожидания. |
void |
put(E e) Вставляет указанный элемент в конец этой очереди. |
int |
remainingCapacity() Всегда возвращает |
boolean |
remove(Object o) Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. |
int |
size() Возвращает количество элементов в этой очереди. |
Spliterator<E> |
spliterator() Возвращает |
E |
take() Возвращает и удаляет голову этой очереди, ожидая, если необходимо, пока элемент не станет доступным. |
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, removeAll, retainAll, toArray, toArray, toString Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Методы, унаследованные от интерфейса java.util.Queue
element, remove Методы, унаследованные от интерфейса java.util.Collection
addAll, clear, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, stream, toArray, toArray Методы, унаследованные от интерфейса java.lang.Iterable
forEach Конструкторы
LinkedTransferQueue
public LinkedTransferQueue()
Создаёт пустую LinkedTransferQueue.
LinkedTransferQueue
public LinkedTransferQueue(Collection<? extends E> c)
Создаёт LinkedTransferQueue, изначально содержащую элементы заданного набора, добавленные в порядке обхода итератора набора.
- Параметры:
-
c- набор элементов, которые должны содержаться изначально - Исключения:
-
NullPointerException- если указанный набор или любой из его элементов имеют значение null
Методы
spliterator
public Spliterator<E> spliterator()
Возвращает Spliterator над элементами в этой очереди.
Возвращаемый разделитель является слабо согласованным.
Разделитель Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.
- Унаследован от:
-
spliteratorв интерфейсеIterable<E> - Унаследован от:
-
spliteratorв интерфейсеCollection<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в интерфейсеCollection<E> - Унаследован от:
-
addв интерфейсеBlockingQueue<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
public E poll()
Описание скопировано из интерфейса: Queue
Извлекает и удаляет голову этой очереди или возвращает null если эта очередь пуста.
- Унаследован от:
-
pollв интерфейсеQueue<E> - Возвращаемое значение:
- голова этой очереди или
nullесли эта очередь пуста
drainTo
public int drainTo(Collection<? super E> c)
Описание скопировано из интерфейса: BlockingQueue
Удаляет все доступные элементы из этой очереди и добавляет их в заданный набор. Эта операция может быть более эффективной, чем многократное обращение к этой очереди с методом poll(). Ошибка, возникшая при попытке добавить элементы в набор 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в интерфейсеIterable<E> - Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам в этой очереди в правильной последовательности
peek
public E peek()
Описание скопировано из интерфейса: Queue
Возвращает, но не удаляет, голову этой очереди или возвращает null, если эта очередь пуста.
- Указано в:
-
peekв интерфейсеQueue<E> - Возвращает:
- голову этой очереди или
null, если эта очередь пуста
isEmpty
public boolean isEmpty()
Возвращает true, если эта очередь не содержит элементов.
- Указано в:
-
isEmptyв интерфейсеCollection<E> - Переопределяет:
-
isEmptyв классеAbstractCollection<E> - Возвращает:
-
trueесли эта очередь не содержит элементов
hasWaitingConsumer
public boolean hasWaitingConsumer()
Описание скопировано из интерфейса: TransferQueue
Возвращает true, если существует хотя бы один потребитель, ожидающий получения элемента через BlockingQueue.take() или с таймаутом poll. Возвращаемое значение представляет собой мгновенное состояние дел.
- Указано в:
-
hasWaitingConsumerв интерфейсеTransferQueue<E> - Возвращает:
-
trueесли существует как минимум один ожидающий потребитель
size
public int size()
Возвращает количество элементов в этой очереди. Если эта очередь содержит более Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.
Обратите внимание, что в отличие от большинства коллекций, этот метод НЕ является операцией постоянного времени. Из-за асинхронной природы этих очередей определение текущего количества элементов требует обхода O(n).
- Указано в:
-
sizeв интерфейсеCollection<E> - Указано в:
-
sizeв классеAbstractCollection<E> - Возвращает:
- количество элементов в этой очереди
getWaitingConsumerCount
public int getWaitingConsumerCount()
Описание скопировано из интерфейса: TransferQueue
Возвращает приблизительное количество потребителей, ожидающих получения элементов через BlockingQueue.take() или с таймаутом poll. Возвращаемое значение является приближением текущего состояния, которое может быть неточным, если потребители завершили ожидание или отказались от него. Значение может быть полезно для мониторинга и эвристик, но не для управления синхронизацией. Реализации этого метода, вероятно, будут заметно медленнее, чем для TransferQueue.hasWaitingConsumer().
- Указано в:
-
getWaitingConsumerCountв интерфейсеTransferQueue<E> - Возвращает:
- количество потребителей, ожидающих получения элементов
remove
public boolean remove(Object o)
Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. Более формально, удаляет элемент e, такой что o.equals(e), если эта очередь содержит один или несколько таких элементов. Возвращает true, если эта очередь содержала указанный элемент (или, что эквивалентно, если эта очередь изменилась в результате вызова).
- Указано в:
-
removeв интерфейсеCollection<E> - Указано в:
-
removeв интерфейсеBlockingQueue<E> - Переопределяет:
-
removeв классеAbstractCollection<E> - Параметры:
-
o- элемент, который необходимо удалить из этой очереди, если он присутствует - Возвращает:
-
trueесли эта очередь изменилась в результате вызова
contains
public boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент. Более формально, возвращает true, если и только если эта очередь содержит как минимум один элемент e, такой что o.equals(e)
- Указано в:
-
containsв интерфейсеCollection<E> - Указано в:
-
containsв интерфейсеBlockingQueue<E> - Переопределяет:
-
containsв классеAbstractCollection<E> - Параметры:
-
o- объект, который требуется проверить на наличие в этой очереди - Возвращает:
-
trueесли эта очередь содержит указанный элемент
remainingCapacity
public int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE, потому что LinkedTransferQueue не ограничена по емкости.
- Указано в:
-
remainingCapacityв интерфейсеBlockingQueue<E> - Возвращает:
-
Integer.MAX_VALUE(как указано вBlockingQueue.remainingCapacity)
© 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.