Интерфейс TransferQueue<E>

Параметры типа:
E - тип элементов, хранящихся в этой очереди
Все суперинтерфейсы:
BlockingQueue<E>, Collection<E>, Iterable<E>, Queue<E>
Все известные реализующие классы:
LinkedTransferQueue
public interface TransferQueue<E>
extends BlockingQueue<E>

A BlockingQueue в которой производители могут ожидать, пока потребители получат элементы. A TransferQueue может быть полезен, например, в приложениях передачи сообщений, в которых производители иногда (используя метод transfer(E)) ожидают получения элементов потребителями, вызывающими take или poll, в то время как в другие моменты помещают элементы в очередь (через метод put ) без ожидания получения. Неблокирующие и с таймаутом версии tryTransfer также доступны. A TransferQueue также может быть запрошен, с помощью hasWaitingConsumer(), есть ли какие-либо потоки, ожидающие элементов, что является обратным аналогом операции peek.

Как и другие блокирующие очереди, a TransferQueue может иметь ограниченную емкость. В таком случае попытка передачи может сначала заблокироваться в ожидании места в очереди и/или последующего получения потребителем. Обратите внимание, что в очереди с нулевой емкостью, такой как SynchronousQueue, put и transfer по сути являются синонимами.

Этот интерфейс является членом Java Collections Framework.

Since:
1.7

Методы

Модификатор и типМетодОписание
intgetWaitingConsumerCount()

Возвращает оценку количества потребителей, ожидающих получения элементов через BlockingQueue.take() или с таймаутом poll.

booleanhasWaitingConsumer()

Возвращает true если существует хотя бы один потребитель, ожидающий получения элемента через BlockingQueue.take() или с таймаутом poll.

voidtransfer​(E e)

Передает элемент потребителю, ожидая, если необходимо.

booleantryTransfer​(E e)

Немедленно передает элемент ожидающему потребителю, если это возможно.

booleantryTransfer​(E e, long timeout, TimeUnit unit)

Передает элемент потребителю, если это возможно до истечения таймаута.

Методы, объявленные в интерфейсе 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

Методы, объявленные в интерфейсе java.lang.Iterable

forEach

Методы, объявленные в интерфейсе java.util.Queue

element, peek, poll, remove

Методы

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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/TransferQueue.html

Spec-Zone .ru
спецификации, руководства, описания, API