- 类型参数:
-
E
- 此队列中保存的元素的类型
- 所有超接口:
-
BlockingQueue<E>
,Collection<E>
,Iterable<E>
,Queue<E>
- 所有已知实现类:
-
LinkedTransferQueue
生产者可以等待消费者接收元素的
BlockingQueue
。例如,在消息传递应用程序中,生产者有时(使用方法 transfer(E)
)等待消费者调用 take
或 poll
接收元素,而在其他时候则通过方法 put
入队元素而无需等待接收。还提供了 非阻塞 和 超时 版本的 tryTransfer
。还可以通过 hasWaitingConsumer()
查询 TransferQueue
是否有任何线程在等待项目,这是与 peek
操作相反的类比。
与其他阻塞队列一样,TransferQueue
可能具有容量限制。如果是这样,尝试的传输操作可能会最初阻塞等待可用空间,和/或随后阻塞等待消费者接收。请注意,在容量为零的队列中,例如 SynchronousQueue
,put
和 transfer
实际上是同义词。
此接口是 Java 集合框架 的成员。
- 自版本:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionint
返回通过BlockingQueue.take()
或定时poll
接收元素的等待消费者数量的估计。boolean
void
将元素传输给消费者,必要时等待。boolean
tryTransfer
(E e) 如果可能,立即将元素传输给等待的消费者。boolean
tryTransfer
(E e, long timeout, TimeUnit unit) 如果可能,在超时时间到期之前将元素传输给消费者。Methods declared in interface java.util.concurrent.BlockingQueue
add, contains, drainTo, drainTo, offer, offer, poll, put, remainingCapacity, remove, take
Methods declared in interface java.util.Collection
addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray
-
Method Details
-
tryTransfer
如果可能,立即将元素传输给等待的消费者。更准确地说,如果已经有消费者在等待接收指定的元素(在
BlockingQueue.take()
或定时poll
中),则立即传输指定的元素,否则在不将元素入队的情况下返回false
。- 参数:
-
e
- 要传输的元素 - 返回:
-
如果元素已传输,则返回
true
,否则返回false
- 抛出:
-
ClassCastException
- 如果指定元素的类别阻止将其添加到此队列中 -
NullPointerException
- 如果指定元素为 null -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此队列中
-
transfer
将元素传输给消费者,必要时等待。更准确地说,如果已经有消费者在等待接收指定的元素(在
BlockingQueue.take()
或定时poll
中),则立即传输指定的元素,否则等待直到元素被消费者接收。- 参数:
-
e
- 要传输的元素 - 抛出:
-
InterruptedException
- 如果在等待时被中断,此时元素不会被留在队列中 -
ClassCastException
- 如果指定元素的类别阻止将其添加到此队列中 -
NullPointerException
- 如果指定元素为 null -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此队列中
-
tryTransfer
如果可能,在超时时间到期之前将元素传输给消费者。更准确地说,如果已经有消费者在等待接收指定的元素(在
BlockingQueue.take()
或定时poll
中),则立即传输指定的元素,否则等待直到元素被消费者接收,如果指定的等待时间到期,则返回false
。- 参数:
-
e
- 要传输的元素 -
timeout
- 等待放弃的时间长度,以unit
为单位 -
unit
- 用于解释timeout
参数的TimeUnit
- 返回:
-
如果成功,则返回
true
,如果指定的等待时间到期,则返回false
,此时元素不会被留在队列中 - 抛出:
-
InterruptedException
- 如果在等待时被中断,此时元素不会被留在队列中 -
ClassCastException
- 如果指定元素的类别阻止将其添加到此队列中 -
NullPointerException
- 如果指定元素为 null -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此队列中
-
hasWaitingConsumer
boolean hasWaitingConsumer()- 返回:
-
如果至少有一个等待的消费者,则返回
true
-
getWaitingConsumerCount
int getWaitingConsumerCount()返回通过BlockingQueue.take()
或定时poll
接收元素的等待消费者数量的估计。返回值是瞬时状态的近似值,如果消费者已完成或放弃等待,则可能不准确。该值可能对监控和启发式有用,但不适用于同步控制。此方法的实现可能比hasWaitingConsumer()
的实现明显慢。- 返回:
- 等待接收元素的消费者数量
-