Module java.base

Interface TransferQueue<E>

类型参数:
E - 此队列中保存的元素的类型
所有超接口:
BlockingQueue<E>, Collection<E>, Iterable<E>, Queue<E>
所有已知实现类:
LinkedTransferQueue

public interface TransferQueue<E> extends BlockingQueue<E>
生产者可以等待消费者接收元素的 BlockingQueue。例如,在消息传递应用程序中,生产者有时(使用方法 transfer(E))等待消费者调用 takepoll 接收元素,而在其他时候则通过方法 put 入队元素而无需等待接收。还提供了 非阻塞超时 版本的 tryTransfer。还可以通过 hasWaitingConsumer() 查询 TransferQueue 是否有任何线程在等待项目,这是与 peek 操作相反的类比。

与其他阻塞队列一样,TransferQueue 可能具有容量限制。如果是这样,尝试的传输操作可能会最初阻塞等待可用空间,和/或随后阻塞等待消费者接收。请注意,在容量为零的队列中,例如 SynchronousQueueputtransfer 实际上是同义词。

此接口是 Java 集合框架 的成员。

自版本:
1.7
  • Method Details

    • 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 - 用于解释 timeout 参数的 TimeUnit
      返回:
      如果成功,则返回 true,如果指定的等待时间到期,则返回 false,此时元素不会被留在队列中
      抛出:
      InterruptedException - 如果在等待时被中断,此时元素不会被留在队列中
      ClassCastException - 如果指定元素的类别阻止将其添加到此队列中
      NullPointerException - 如果指定元素为 null
      IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此队列中
    • hasWaitingConsumer

      boolean hasWaitingConsumer()
      如果至少有一个消费者等待通过 BlockingQueue.take() 或定时 poll 接收元素,则返回 true。返回值表示瞬时状态。
      返回:
      如果至少有一个等待的消费者,则返回 true
    • getWaitingConsumerCount

      int getWaitingConsumerCount()
      返回通过 BlockingQueue.take() 或定时 poll 接收元素的等待消费者数量的估计。返回值是瞬时状态的近似值,如果消费者已完成或放弃等待,则可能不准确。该值可能对监控和启发式有用,但不适用于同步控制。此方法的实现可能比 hasWaitingConsumer() 的实现明显慢。
      返回:
      等待接收元素的消费者数量