模块  java.base
软件包  java.util.concurrent

Interface TransferQueue<E>

  • 参数类型
    E - 此队列中保留的元素类型
    All Superinterfaces:
    BlockingQueue<E>Collection<E>Iterable<E>Queue<E>
    所有已知实现类:
    LinkedTransferQueue

    public interface TransferQueue<E>extends BlockingQueue<E>
    BlockingQueue ,生产者可以等待消费者接收元素。 例如,在消息传递应用程序中, TransferQueue可能是有用的,其中生产者有时(使用方法transfer(E) )等待消费者调用takepoll接收元素,而在其他时候将元素排队(通过方法put )而不等待接收。 Non-blockingtime-out版本的tryTransfer也可用。 TransferQueue还可以查询,经由hasWaitingConsumer() ,是否有等待项,这是一种相反的类似于一个任何线程peek操作。

    与其他阻塞队列一样, TransferQueue可能具有容量限制。 如果是,则尝试的传输操作可以最初阻止等待可用空间,和/或随后阻止等待消费者接收。 请注意,在与零容量的队列,例如SynchronousQueueputtransfer是有效的代名词。

    此界面是Java Collections Framework的成员。

    从以下版本开始:
    1.7
    • 方法详细信息

      • 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()的实现
        结果
        等待接收元素的消费者数量