package java.util.concurrent; import java.util.Queue; /** * A BlockingQueue is a {@link java.util.Queue} that additionally * supports * operations that wait for elements to exist when taking them, and/or * wait for space to exist when putting them. * *
BlockingQueue implementations might or might not have bounded * capacity or other insertion constraints, so in general, you cannot * tell if a given put will block. * *
A BlockingQueue should not accept null elements as * null is used as a sentinel value to indicate failure of * poll operations. If it necessary to allow null as an * element then it is the responsibility of the client code to deal with * this ambiguity. It is preferable to use a special object to represent * "no element" rather than using the value null. *
* Usage example. Here is a sketch of a classic producer-consumer program. *
* class Producer implements Runnable { * private final BlockingQueue queue; * Producer(BlockingQueue q) { queue = q; } * public void run() { * try { * while(true) { queue.put(produce()); } * } * catch (InterruptedException ex) { ... handle ...} * } * Object produce() { ... } * } * * * class Consumer implements Runnable { * private final BlockingQueue queue; * Concumer(BlockingQueue q) { queue = q; } * public void run() { * try { * while(true) { consume(queue.take()); } * } * catch (InterruptedException ex) { ... handle ...} * } * void consume(Object x) { ... } * } * * class Setup { * void main() { * BlockingQueue q = new SomeQueueImplementation(); * Producer p = new Producer(q); * Consumer c = new Consumer(q); * new Thread(p).start(); * new Thread(c).start(); * } * } ** *
BlockingQueues do not intrinsically support any kind
* of "close" or "shutdown" operation to indicate that
* no more items will be added.
* The needs and usage of such features tend to be implementation
* dependent. For example, a common tactic is for producers to insert
* special end-of-stream or poison objects, that are
* interpreted accordingly when taken by consumers.
*
* @since 1.5
* @spec JSR-166
* @revised $Date: 2003/05/14 21:30:45 $
* @editor $Author: tim $
*/
public interface BlockingQueue