E - the type of elements held in this collectionpublic interface TransferQueue<E> extends BlockingQueue<E>
BlockingQueue in which producers may wait for consumers
 to receive elements. A TransferQueue may be useful for
 example in message passing applications in which producers
 sometimes (using method transfer(E)) await receipt of
 elements by consumers invoking take or poll, while
 at other times enqueue elements (via method put) without
 waiting for receipt.
 Non-blocking and
 time-out versions of
 tryTransfer are also available.
 A TransferQueue may also be queried, via hasWaitingConsumer(), whether there are any threads waiting for
 items, which is a converse analogy to a peek operation.
 Like other blocking queues, a TransferQueue may be
 capacity bounded. If so, an attempted transfer operation may
 initially block waiting for available space, and/or subsequently
 block waiting for reception by a consumer. Note that in a queue
 with zero capacity, such as SynchronousQueue, put
 and transfer are effectively synonymous.
 
This interface is a member of the Java Collections Framework.
| Modifier and Type | Method and Description | 
|---|---|
| int | getWaitingConsumerCount ()Returns an estimate of the number of consumers waiting to
 receive elements via  BlockingQueue.take()or timedpoll. | 
| boolean | hasWaitingConsumer ()Returns  trueif there is at least one consumer waiting
 to receive an element viaBlockingQueue.take()or
 timedpoll. | 
| void | transfer (E e)Transfers the element to a consumer, waiting if necessary to do so. | 
| boolean | tryTransfer (E e)Transfers the element to a waiting consumer immediately, if possible. | 
| boolean | tryTransfer (E e,
 long timeout,
 TimeUnit unit)Transfers the element to a consumer if it is possible to do so
 before the timeout elapses. | 
boolean tryTransfer(E e)
More precisely, transfers the specified element immediately
 if there exists a consumer already waiting to receive it (in
 BlockingQueue.take() or timed poll),
 otherwise returning false without enqueuing the element.
e - the element to transfertrue if the element was transferred, else
 falseClassCastException  - if the class of the specified element
 prevents it from being added to this queueNullPointerException  - if the specified element is nullIllegalArgumentException  - if some property of the specified
 element prevents it from being added to this queuevoid transfer(E e) throws InterruptedException
More precisely, transfers the specified element immediately
 if there exists a consumer already waiting to receive it (in
 BlockingQueue.take() or timed poll),
 else waits until the element is received by a consumer.
e - the element to transferInterruptedException  - if interrupted while waiting,
 in which case the element is not left enqueuedClassCastException  - if the class of the specified element
 prevents it from being added to this queueNullPointerException  - if the specified element is nullIllegalArgumentException  - if some property of the specified
 element prevents it from being added to this queueboolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException
More precisely, transfers the specified element immediately
 if there exists a consumer already waiting to receive it (in
 BlockingQueue.take() or timed poll),
 else waits until the element is received by a consumer,
 returning false if the specified wait time elapses
 before the element can be transferred.
e - the element to transfertimeout - how long to wait before giving up, in units of
 unitunit - a TimeUnit determining how to interpret the
 timeout parametertrue if successful, or false if
 the specified waiting time elapses before completion,
 in which case the element is not left enqueuedInterruptedException  - if interrupted while waiting,
 in which case the element is not left enqueuedClassCastException  - if the class of the specified element
 prevents it from being added to this queueNullPointerException  - if the specified element is nullIllegalArgumentException  - if some property of the specified
 element prevents it from being added to this queueboolean hasWaitingConsumer()
true if there is at least one consumer waiting
 to receive an element via BlockingQueue.take() or
 timed poll.
 The return value represents a momentary state of affairs.true if there is at least one waiting consumerint getWaitingConsumerCount()
BlockingQueue.take() or timed
 poll. The return value is an
 approximation of a momentary state of affairs, that may be
 inaccurate if consumers have completed or given up waiting.
 The value may be useful for monitoring and heuristics, but
 not for synchronization control. Implementations of this
 method are likely to be noticeably slower than those for
 hasWaitingConsumer(). Submit a bug or feature 
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
 Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy. 
Scripting on this page tracks web page traffic, but does not change the content in any way.