Интерфейс 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, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/TransferQueue.html