Java in a Nutshell, 5th Edition [Electronic resources]

نسخه متنی -صفحه : 1191/ 770
نمايش فراداده

BlockingQueue<E>java.util.concurrent

Java 5.0collection

This interface extends the java.util.Queue interface of the Java Collections Framework and adds blocking put( ) and take( ) methods. Blocking queues are useful in many concurrent algorithms in which a producer thread puts objects onto a queue and a consumer thread removes them for some kind of processing. The producer thread must block if a bounded queue fills up, and the consumer thread must block if no objects are available on the queue.

In addition to put( ) and take( ) methods that block indefinitely, BlockingQueue also defines timed versions of the Queue methods offer( ) and poll( ) that wait up to the specified time. The timeout is specified as both a long and a TimeUnit constant.

drainTo( ) removes all available elements from a BlockingQueue, adds them to the specified collection, and returns the number of elements removed from the queue. drainTo( ) does not block. A variant on this method puts an upper bound on the number of elements removed from the queue.

remainingCapacity( ) returns the number of elements that can be added to the queue before it becomes full or returns Integer.MAX_VALUE if the BlockingQueue is not a bounded queue. For bounded queues, this method provides a hint as to whether a call to put( ) will block.

BlockingQueue implementations are not allowed to accept null elements. The BlockingQueue interface refines the Collection.add( ) and Queue.offer( ) contracts to indicate that these methods throw NullPointerException if passed a null value.

Figure 16-72. java.util.concurrent.BlockingQueue<E>

public interface

BlockingQueue<E> extends java.util.Queue<E> { // Public Instance Methods boolean

add (E

o ); int

drainTo (java.util.Collection<? super E>

c ); int

drainTo (java.util.Collection<? super E>

c , int

maxElements ); boolean

offer (E

o ); boolean

offer (E

o , long

timeout , TimeUnit

unit ) throws InterruptedException; E

poll (long

timeout , TimeUnit

unit ) throws InterruptedException; void

put (E

o ) throws InterruptedException; int

remainingCapacity ( ); E

take ( ) throws InterruptedException; }

Implementations

ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue

Passed To

ExecutorCompletionService.ExecutorCompletionService( ), ThreadPoolExecutor.ThreadPoolExecutor( )

Returned By

ScheduledThreadPoolExecutor.getQueue( ), ThreadPoolExecutor.getQueue( )