-
- 参数类型
-
E
- 此队列中保留的元素类型
- All Superinterfaces:
-
BlockingQueue<E>
,Collection<E>
,Iterable<E>
,Queue<E>
- 所有已知实现类:
-
LinkedTransferQueue
public interface TransferQueue<E> extends BlockingQueue<E>
BlockingQueue
,生产者可以等待消费者接收元素。 例如,在消息传递应用程序中,TransferQueue
可能是有用的,其中生产者有时(使用方法transfer(E)
)等待消费者调用take
或poll
接收元素,而在其他时候将元素排队(通过方法put
)而不等待接收。 Non-blocking和time-out版本的tryTransfer
也可用。 甲TransferQueue
还可以查询,经由hasWaitingConsumer()
,是否有等待项,这是一种相反的类似于一个任何线程peek
操作。与其他阻塞队列一样,
TransferQueue
可能具有容量限制。 如果是,则尝试的传输操作可以最初阻止等待可用空间,和/或随后阻止等待消费者接收。 请注意,在与零容量的队列,例如SynchronousQueue
,put
和transfer
是有效的代名词。此界面是Java Collections Framework的成员。
- 从以下版本开始:
- 1.7
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 int
getWaitingConsumerCount()
返回通过BlockingQueue.take()
或定时poll
等待接收元素的消费者数量的估计值。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.Collection
addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray
-
-
-
-
方法详细信息
-
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()
的实现 。- 结果
- 等待接收元素的消费者数量
-
-