Интерфейс TransferQueue<E>
- Параметры типа:
-
E- тип элементов, хранящихся в этом наборе
- Все суперинтерфейсы:
- BlockingQueue<E>, Collection<E>, Iterable<E>, Queue<E>
- Все известные реализующие классы:
- LinkedTransferQueue
public interface TransferQueue<E> extends BlockingQueue<E>
A BlockingQueue в котором производители могут ожидать, пока потребители получат элементы. Очередь может быть полезна, например, в приложениях передачи сообщений, в которых производители иногда (используя метод transfer(E)) ожидают получения элементов потребителями, вызывающими take или poll, в то время как в другие моменты добавляют элементы (через метод put ), не ожидая получения. Неблокирующие и с таймаутом версии tryTransfer также доступны. Очередь можно запросить, используя hasWaitingConsumer(), есть ли потоки, ожидающие элементы, что является обратным аналогом операции peek.
Как и другие блокирующие очереди, TransferQueue может иметь ограниченную емкость. В этом случае попытка операции передачи может первоначально заблокировать ожидание доступного места и/или впоследствии заблокировать ожидание приема потребителем. Обратите внимание, что в очереди с нулевой емкостью, такой как SynchronousQueue, put и transfer фактически синонимичны.
Этот интерфейс является частью Java Collections Framework.
- С момента:
- 1.7
Методы
| Модификатор и тип | Метод и описание |
|---|---|
int |
getWaitingConsumerCount() Возвращает оценку количества потребителей, ожидающих получения элементов через |
boolean |
hasWaitingConsumer() Возвращает |
void |
transfer(E e) Передает элемент потребителю, ожидая, если необходимо. |
boolean |
tryTransfer(E e) Передает элемент ожидающему потребителю немедленно, если это возможно. |
boolean |
tryTransfer(E e,
long timeout,
TimeUnit unit) Передает элемент потребителю, если это возможно до истечения таймаута. |
Методы, унаследованные от интерфейса java.util.concurrent.BlockingQueue
add, contains, drainTo, drainTo, offer, offer, poll, put, remainingCapacity, remove, take Методы, унаследованные от интерфейса java.util.Queue
element, peek, poll, remove Методы, унаследованные от интерфейса java.util.Collection
addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray Методы, унаследованные от интерфейса java.lang.Iterable
forEach Методы
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, 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.