-
- 参数类型
-
E- 保存在此队列中的元素的类型
- All Superinterfaces:
-
BlockingQueue<E>,Collection<E>,Iterable<E>,Queue<E>
- 所有已知实现类:
-
LinkedTransferQueue
public interface TransferQueue<E> extends BlockingQueue<E>
ABlockingQueue,其中生产者可能等待消费者接收元素。 ATransferQueue可能例如在消息传递应用中是有用的,其中生产者有时(使用方法transfer(E))等待消费者调用take或poll的元素的接收,而在其他时间,等待元素(经由方法put)而不等待接收。 Non-blocking和time-out版本的tryTransfer也可用。 ATransferQueue也可以通过hasWaitingConsumer()询问是否有任何线程等待项目,这是与peek操作相反的类比。像其他阻塞队列一样,
TransferQueue可能是容量有限的。 如果是这样,尝试的转移操作可以最初阻止等待可用空间,和/或随后阻止等待消费者的接收。 请注意,在与零容量的队列,例如SynchronousQueue,put和transfer是有效的代名词。此接口是Java Collections Framework的成员。
- 从以下版本开始:
- 1.7
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 intgetWaitingConsumerCount()通过BlockingQueue.take()或定时poll返回等待接收元素的消费者数量的估计。booleanhasWaitingConsumer()voidtransfer(E e)将元素转移给消费者,如有必要,等待。booleantryTransfer(E e)如果可能的话,将元件立即转移给等待的消费者。booleantryTransfer(E e, long timeout, TimeUnit unit)如果可以在超时过程之前将元素传送给消费者。-
Methods inherited from interface java.util.concurrent.BlockingQueue
add, contains, drainTo, drainTo, offer, offer, poll, put, remainingCapacity, remove, take
-
Methods inherited from interface java.util.Collection
addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray
-
-
-
-
方法详细信息
-
tryTransfer
boolean tryTransfer(E e)
如果可能的话,将元件立即转移给等待的消费者。更确切地说,如果存在已经等待接收消费者的消费者(
BlockingQueue.take()或定时poll),则立即转移指定元素,否则返回false而不对该元素进行排队。- 参数
-
e- 要传输的元素 - 结果
-
true如果元素被转移,否则为false - 异常
-
ClassCastException- 如果指定元素的类阻止将其添加到此队列中 -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此队列中
-
transfer
void transfer(E e) throws InterruptedException
将元素转移给消费者,如有必要,等待。更准确地说,如果存在已经等待接收消费者的消费者(
BlockingQueue.take()或定时poll),则立即传送指定的元素,否则等待消费者收到该元素。- 参数
-
e- 要传输的元素 - 异常
-
InterruptedException- 如果在等待时中断,在这种情况下元素不会被排入队列 -
ClassCastException- 如果指定元素的类阻止将其添加到此队列中 -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此队列中
-
tryTransfer
boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException
如果可以在超时过程之前将元素传送给消费者。更确切地说,如果存在已经等待接收消费者的消费者(
BlockingQueue.take()或定时poll),则立即转移指定的元素,否则等待消费者接收到该元素,如果在元素可以在元素之前经过指定的等待时间,则返回false转入。- 参数
-
e- 要传输的元素 -
timeout- 放弃等待多久,单位为unit -
unit- aTimeUnit确定如何解释timeout参数 - 结果
-
true如果成功,或false如果在完成之前经过了指定的等待时间,在这种情况下,元素不会排入队列 - 异常
-
InterruptedException- 如果在等待时中断,在这种情况下元素不会被排入队列 -
ClassCastException- 如果指定元素的类阻止将其添加到此队列中 -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此队列中
-
hasWaitingConsumer
boolean hasWaitingConsumer()
返回true,如果有至少一个消费者等待经由以接收元件BlockingQueue.take()或定时poll。 返回值代表一时的状态。- 结果
-
true如果有至少一个等待消费者
-
getWaitingConsumerCount
int getWaitingConsumerCount()
通过BlockingQueue.take()或定时poll返回等待接收元素的消费者数量的估计。 返回值是一个近似的瞬间状态,如果消费者已经完成或放弃等待,这可能是不准确的。 该值可能对监控和启发式有用,但不适用于同步控制。 这种方法的实施可能比hasWaitingConsumer()明显慢。- 结果
- 消费者等待接收元素的数量
-
-