org.apache.commons.collections.buffer
Class BlockingBuffer

java.lang.Object
  extended by org.apache.commons.collections.collection.SynchronizedCollection
      extended by org.apache.commons.collections.buffer.SynchronizedBuffer
          extended by org.apache.commons.collections.buffer.BlockingBuffer
All Implemented Interfaces:
java.io.Serializable, java.lang.Iterable, java.util.Collection, Buffer

public class BlockingBuffer
extends SynchronizedBuffer

Decorates another Buffer to make get() and remove() block when the Buffer is empty.

If either get or remove is called on an empty Buffer, the calling thread waits for notification that an add or addAll operation has completed.

When one or more entries are added to an empty Buffer, all threads blocked in get or remove are notified. There is no guarantee that concurrent blocked get or remove requests will be "unblocked" and receive data in the order that they arrive.

This class is Serializable from Commons Collections 3.1. This class contains an extra field in 3.2, however the serialization specification will handle this gracefully.

Since:
Commons Collections 3.0
Version:
$Revision: 646777 $ $Date: 2008-04-10 13:33:15 +0100 (Thu, 10 Apr 2008) $
Author:
Stephen Colebourne, Janek Bogucki, Phil Steitz, James Carman
See Also:
Serialized Form

Field Summary
 
Fields inherited from class org.apache.commons.collections.collection.SynchronizedCollection
collection, lock
 
Constructor Summary
protected BlockingBuffer(Buffer buffer)
          Constructor that wraps (not copies).
protected BlockingBuffer(Buffer buffer, long timeoutMillis)
          Constructor that wraps (not copies).
 
Method Summary
 boolean add(java.lang.Object o)
           
 boolean addAll(java.util.Collection c)
           
static Buffer decorate(Buffer buffer)
          Factory method to create a blocking buffer.
static Buffer decorate(Buffer buffer, long timeoutMillis)
          Factory method to create a blocking buffer with a timeout value.
 java.lang.Object get()
          Gets the next value from the buffer, waiting until an object is added if the buffer is empty.
 java.lang.Object get(long timeout)
          Gets the next value from the buffer, waiting until an object is added for up to the specified timeout value if the buffer is empty.
 java.lang.Object remove()
          Removes the next value from the buffer, waiting until an object is added if the buffer is empty.
 java.lang.Object remove(long timeout)
          Removes the next value from the buffer, waiting until an object is added for up to the specified timeout value if the buffer is empty.
 
Methods inherited from class org.apache.commons.collections.buffer.SynchronizedBuffer
getBuffer
 
Methods inherited from class org.apache.commons.collections.collection.SynchronizedCollection
clear, contains, containsAll, decorate, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Collection
clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray
 

Constructor Detail

BlockingBuffer

protected BlockingBuffer(Buffer buffer)
Constructor that wraps (not copies).

Parameters:
buffer - the buffer to decorate, must not be null
Throws:
java.lang.IllegalArgumentException - if the buffer is null

BlockingBuffer

protected BlockingBuffer(Buffer buffer,
                         long timeoutMillis)
Constructor that wraps (not copies).

Parameters:
buffer - the buffer to decorate, must not be null
timeoutMillis - the timeout value in milliseconds, zero or less for no timeout
Throws:
java.lang.IllegalArgumentException - if the buffer is null
Since:
Commons Collections 3.2
Method Detail

decorate

public static Buffer decorate(Buffer buffer)
Factory method to create a blocking buffer.

Parameters:
buffer - the buffer to decorate, must not be null
Returns:
a new blocking Buffer
Throws:
java.lang.IllegalArgumentException - if buffer is null

decorate

public static Buffer decorate(Buffer buffer,
                              long timeoutMillis)
Factory method to create a blocking buffer with a timeout value.

Parameters:
buffer - the buffer to decorate, must not be null
timeoutMillis - the timeout value in milliseconds, zero or less for no timeout
Returns:
a new blocking buffer
Throws:
java.lang.IllegalArgumentException - if the buffer is null
Since:
Commons Collections 3.2

add

public boolean add(java.lang.Object o)
Specified by:
add in interface java.util.Collection
Overrides:
add in class SynchronizedCollection

addAll

public boolean addAll(java.util.Collection c)
Specified by:
addAll in interface java.util.Collection
Overrides:
addAll in class SynchronizedCollection

get

public java.lang.Object get()
Gets the next value from the buffer, waiting until an object is added if the buffer is empty. This method uses the default timeout set in the constructor.

Specified by:
get in interface Buffer
Overrides:
get in class SynchronizedBuffer
Returns:
the next object in the buffer, which is not removed
Throws:
BufferUnderflowException - if an interrupt is received

get

public java.lang.Object get(long timeout)
Gets the next value from the buffer, waiting until an object is added for up to the specified timeout value if the buffer is empty.

Parameters:
timeout - the timeout value in milliseconds
Throws:
BufferUnderflowException - if an interrupt is received
BufferUnderflowException - if the timeout expires
Since:
Commons Collections 3.2

remove

public java.lang.Object remove()
Removes the next value from the buffer, waiting until an object is added if the buffer is empty. This method uses the default timeout set in the constructor.

Specified by:
remove in interface Buffer
Overrides:
remove in class SynchronizedBuffer
Returns:
the next object in the buffer, which is also removed
Throws:
BufferUnderflowException - if an interrupt is received

remove

public java.lang.Object remove(long timeout)
Removes the next value from the buffer, waiting until an object is added for up to the specified timeout value if the buffer is empty.

Parameters:
timeout - the timeout value in milliseconds
Throws:
BufferUnderflowException - if an interrupt is received
BufferUnderflowException - if the timeout expires
Since:
Commons Collections 3.2


Copyright © 2001-2008 The Apache Software Foundation. All Rights Reserved.