Module  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>
    A BlockingQueue ,其中生产者可能等待消费者接收元素。 A TransferQueue可能例如在消息传递应用中是有用的,其中生产者有时(使用方法transfer(E) )等待消费者调用takepoll的元素的接收,而在其他时间,等待元素(经由方法put )而不等待接收。 Non-blockingtime-out版本的tryTransfer也可用。 A TransferQueue也可以通过hasWaitingConsumer()询问是否有任何线程等待项目,这是与peek操作相反的类比。

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

    此接口是Java Collections Framework的成员。

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

      • 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 - a TimeUnit确定如何解释 timeout参数
        结果
        true如果成功,或 false如果在完成之前经过了指定的等待时间,在这种情况下,元素不会排入队列
        异常
        InterruptedException - 如果在等待时中断,在这种情况下元素不会被排入队列
        ClassCastException - 如果指定元素的类阻止将其添加到此队列中
        NullPointerException - 如果指定的元素为空
        IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此队列中
      • hasWaitingConsumer

        boolean hasWaitingConsumer​()
        返回true ,如果有至少一个消费者等待经由以接收元件BlockingQueue.take()或定时poll 返回值代表一时的状态。
        结果
        true如果有至少一个等待消费者
      • getWaitingConsumerCount

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