Интерфейс TransferQueue<E>
- Параметры типа:
-
E- тип элементов, хранящихся в этой очереди
- Все суперинтерфейсы:
-
BlockingQueue<E>,Collection<E>,Iterable<E>,Queue<E>
- Все известные реализующие классы:
LinkedTransferQueue
public interface TransferQueue<E> extends BlockingQueue<E>
BlockingQueue, в которой производители могут ожидать получения элементов потребителями. Очередь TransferQueue может быть полезной, например, в приложениях передачи сообщений, в которых производители иногда (используя метод transfer(E)) ожидают получения элементов потребителями, вызывающими take или poll, в то время как в других случаях помещают элементы в очередь (через метод put) без ожидания получения. Доступны также неблокирующие и с таймаутом версии tryTransfer. Очередь TransferQueue может быть запрошена на наличие ожидающих потоков, через hasWaitingConsumer(), что является обратным аналогом операции peek. Как и другие блокирующие очереди, очередь TransferQueue может быть ограничена по размеру. В таком случае попытка операции передачи может первоначально заблокироваться, ожидая свободного места, и/или впоследствии заблокироваться, ожидая получения потребителем. Обратите внимание, что в очереди с нулевой емкостью, такой как SynchronousQueue, put и transfer фактически являются синонимами.
Этот интерфейс является частью Java Collections Framework.
- С тех пор:
- 1.7
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
getWaitingConsumerCount() |
Возвращает оценку количества потребителей, ожидающих получения элементов через BlockingQueue.take() или с таймаутом poll. |
boolean |
hasWaitingConsumer() |
Возвращает true если имеется по крайней мере один потребитель, ожидающий получения элемента через BlockingQueue.take() или с таймаутом poll. |
void |
transfer |
Передает элемент потребителю, ожидая, если необходимо. |
boolean |
tryTransfer |
Передает элемент ожидающему потребителю немедленно, если возможно. |
boolean |
tryTransfer |
Передает элемент потребителю, если это возможно до истечения таймаута. |
Методы, объявленные в интерфейсе java.util.concurrent.BlockingQueue
add, contains, drainTo, drainTo, offer, offer, poll, put, remainingCapacity, remove, take
Методы, объявленные в интерфейсе java.util.Collection
addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray
Подробное описание методов
tryTransfer
boolean tryTransfer(E e)
Точнее, передает указанный элемент немедленно, если существует потребитель, уже ожидающий его (в BlockingQueue.take() или с таймаутом poll), в противном случае возвращает false без добавления элемента в очередь.
- Параметры:
-
e- элемент для передачи - Возвращает:
-
trueесли элемент был передан, иначеfalse - Исключения:
-
ClassCastException- если класс указанного элемента препятствует его добавлению в эту очередь -
NullPointerException- если указанный элемент равен null -
IllegalArgumentException- если некоторые свойства указанного элемента препятствуют его добавлению в эту очередь
transfer
void transfer(E e) throws InterruptedException
Точнее, передает указанный элемент немедленно, если существует потребитель, уже ожидающий его (в BlockingQueue.take() или с таймаутом poll), иначе ожидает, пока элемент не будет получен потребителем.
- Параметры:
-
e- элемент для передачи - Исключения:
-
InterruptedException- если прервано ожидание, в этом случае элемент не остается в очереди -
ClassCastException- если класс указанного элемента препятствует его добавлению в эту очередь -
NullPointerException- если указанный элемент равен null -
IllegalArgumentException- если некоторые свойства указанного элемента препятствуют его добавлению в эту очередь
tryTransfer
boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException
Точнее, передает указанный элемент немедленно, если существует потребитель, уже ожидающий его (в BlockingQueue.take() или с таймаутом poll), иначе ожидает, пока элемент не будет получен потребителем, возвращая false если заданное время ожидания истекает, прежде чем элемент может быть передан.
- Параметры:
-
e- элемент для передачи -
timeout- время ожидания, в единицахunit -
unit-TimeUnitопределяющий, как интерпретировать параметрtimeout - Возвращает:
-
trueесли успешно, илиfalseесли заданное время ожидания истекает до завершения, в этом случае элемент не остается в очереди - Исключения:
-
InterruptedException- если прервано ожидание, в этом случае элемент не остается в очереди -
ClassCastException- если класс указанного элемента препятствует его добавлению в эту очередь -
NullPointerException- если указанный элемент равен null -
IllegalArgumentException- если некоторые свойства указанного элемента препятствуют его добавлению в эту очередь
hasWaitingConsumer
boolean hasWaitingConsumer()
true если имеется по крайней мере один потребитель, ожидающий получения элемента через BlockingQueue.take() или с таймаутом poll. Значение возврата представляет собой мгновенное состояние дел.- Возвращает:
-
trueесли есть по крайней мере один ожидающий потребитель
getWaitingConsumerCount
int getWaitingConsumerCount()
BlockingQueue.take() или с таймаутом poll. Возвращаемое значение является приближением мгновенного состояния дел, которое может быть неточным, если потребители завершили ожидание или отказались от него. Значение может быть полезным для мониторинга и эвристики, но не для управления синхронизацией. Реализации этого метода, вероятно, будут заметно медленнее, чем реализации для hasWaitingConsumer().- Возвращает:
- количество потребителей, ожидающих получения элементов
© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/TransferQueue.html