Интерфейс 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 |
Передает элемент потребителю, если это возможно сделать до истечения времени ожидания. |
Методы, объявленные в интерфейсе BlockingQueue
add, contains, drainTo, drainTo, offer, offer, poll, put, remainingCapacity, remove, take | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно без нарушения ограничений емкости, возвращая true в случае успеха и выбрасывая IllegalStateException, если в данный момент нет свободного места. |
boolean |
contains |
Возвращает true, если эта очередь содержит указанный элемент. |
int |
drainTo |
Удаляет все доступные элементы из этой очереди и добавляет их в указанную коллекцию. |
int |
drainTo |
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в указанную коллекцию. |
boolean |
offer |
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно без нарушения ограничений емкости, возвращая true в случае успеха и false, если в данный момент нет свободного места. |
boolean |
offer |
Вставляет указанный элемент в эту очередь, ожидая при необходимости вплоть до указанного времени ожидания, пока освободится место. |
E |
poll |
Извлекает и удаляет голову этой очереди, ожидая при необходимости вплоть до указанного времени ожидания, пока элемент станет доступным. |
void |
put |
Вставляет указанный элемент в эту очередь, ожидая при необходимости освобождения места. |
int |
remainingCapacity() |
Возвращает количество дополнительных элементов, которые эта очередь в идеале (при отсутствии ограничений по памяти или ресурсам) может принять без блокировки, или Integer.MAX_VALUE, если внутреннего ограничения нет. |
boolean |
remove |
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
E |
take() |
Извлекает и удаляет голову этой очереди, ожидая при необходимости, пока элемент станет доступным. |
Методы, объявленные в интерфейсе Collection
addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет все элементы из указанной коллекции в эту коллекцию (необязательная операция). |
void |
clear() |
Удаляет все элементы из этой коллекции (необязательная операция). |
boolean |
containsAll |
Возвращает true, если эта коллекция содержит все элементы из указанной коллекции. |
boolean |
equals |
Сравнивает указанный объект с этой коллекцией на равенство. |
int |
hashCode() |
Возвращает значение хэш-кода для этой коллекции. |
boolean |
isEmpty() |
Возвращает true, если эта коллекция не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам в этой коллекции. |
default Stream |
parallelStream() |
Возвращает возможно параллельный Stream с этой коллекцией в качестве источника. |
boolean |
removeAll |
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
default boolean |
removeIf |
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату (необязательная операция). |
boolean |
retainAll |
Сохраняет только те элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой коллекции. |
default Spliterator |
spliterator() |
Создает Spliterator по элементам в этой коллекции. |
default Stream |
stream() |
Возвращает последовательный Stream с этой коллекцией в качестве источника. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы в этой коллекции. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы в этой коллекции, используя предоставленную функцию generator для выделения возвращаемого массива. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы в этой коллекции; тип возвращаемого массива во время выполнения соответствует типу указанного массива. |
Методы, объявленные в интерфейсе Iterable
forEach | Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
forEach |
Выполняет данное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. |
Методы, объявленные в интерфейсе Queue
element, peek, poll, remove | Модификатор и тип | Метод | Описание |
|---|---|---|
E |
element() |
Извлекает, но не удаляет голову этой очереди. |
E |
peek() |
Извлекает, но не удаляет голову этой очереди или возвращает null, если эта очередь пуста. |
E |
poll() |
Извлекает и удаляет голову этой очереди или возвращает null, если эта очередь пуста. |
E |
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, 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.