今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

TransferQueue

概述

TransferQueue 是一种可以让生产者等待消费者接收元素的 BlockingQueue。在消息传递应用中,TransferQueue 可能很有用,在这种应用中,生产者有时(使用方法 transfer)会等待消费者调用 take 或 poll 接收元素,而在其他时候则会(通过方法 put)将元素入队而不等待接收。也有非阻塞和超时版本的 tryTransfer。也可以通过 hasWaitingConsumer 查询 TransferQueue,看看是否有任何线程在等待项目,这与 peek 操作是反向类比。像其他阻塞队列一样,TransferQueue 也可能具有容量限制。如果是这样,则尝试的转移操作可能会先阻塞等待可用空间,然后再阻塞等待消费者接收。注意,在容量为零的队列(例如 SynchronousQueue)中,put 和 transfer 实际上是等价的。

方法解析

tryTransfer 将元素立即传输给正在等待的消费者(如果可能的话)。更精确地说,如果已经有一个消费者正在等待接收它(在 take 或定时 poll 中),则立即传输指定的元素,否则返回 false,而不排队元素。

transfer 将元素传递给消费者,如果必要,则等待。更精确地说,如果已经有一个消费者在等待接收它(在 take 或者定时 poll 中),则立即传递指定的元素,否则等待直到元素被消费者接收。

hasWaitingConsumer 如果至少有一个消费者正在等待通过 take 或定时 poll 接收一个元素,则返回 true。返回值表示当前的情况。

getWaitingConsumerCount 此方法返回通过take或timed poll接收元素的消费者数量的估计值。返回值表示当前事态的近似状态,如果消费者已完成或放弃等待,则可能不准确。此值可能对监控和启发式方法有用,但不适用于同步控制。此方法的实现可能比hasWaitingConsumer明显慢。

分享到:

专栏

类型标签

网站访问总量