public class BoundedBuffer extends SynchronizedBuffer implements BoundedCollection
Buffer to ensure a fixed maximum size.
Note: This class should only be used if you need to add bounded
behaviour to another buffer. If you just want a bounded buffer then
you should use BoundedFifoBuffer or CircularFifoBuffer.
The decoration methods allow you to specify a timeout value. This alters the behaviour of the add methods when the buffer is full. Normally, when the buffer is full, the add method will throw an exception. With a timeout, the add methods will wait for up to the timeout period to try and add the elements.
| Modifier and Type | Class and Description |
|---|---|
private class |
BoundedBuffer.NotifyingIterator
BoundedBuffer iterator.
|
| Modifier and Type | Field and Description |
|---|---|
private int |
maximumSize
The maximum size.
|
private static long |
serialVersionUID
The serialization version.
|
private long |
timeout
The timeout milliseconds.
|
collection, lock| Modifier | Constructor and Description |
|---|---|
protected |
BoundedBuffer(Buffer buffer,
int maximumSize,
long timeout)
Constructor that wraps (not copies) another buffer, making it bounded
waiting only up to a maximum amount of time.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
add(java.lang.Object o) |
boolean |
addAll(java.util.Collection c) |
static BoundedBuffer |
decorate(Buffer buffer,
int maximumSize)
Factory method to create a bounded buffer.
|
static BoundedBuffer |
decorate(Buffer buffer,
int maximumSize,
long timeout)
Factory method to create a bounded buffer that blocks for a maximum
amount of time.
|
boolean |
isFull()
Returns true if this collection is full and no new elements can be added.
|
java.util.Iterator |
iterator()
Iterators must be manually synchronized.
|
int |
maxSize()
Gets the maximum size of the collection (the bound).
|
java.lang.Object |
remove()
Gets and removes the next object from the buffer.
|
private void |
timeoutWait(int nAdditions) |
decorate, get, getBufferclear, contains, containsAll, decorate, equals, hashCode, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toStringclone, finalize, getClass, notify, notifyAll, wait, wait, waitprivate static final long serialVersionUID
private final int maximumSize
private final long timeout
protected BoundedBuffer(Buffer buffer, int maximumSize, long timeout)
buffer - the buffer to wrap, must not be nullmaximumSize - the maximum size, must be size one or greatertimeout - the maximum amount of time to waitjava.lang.IllegalArgumentException - if the buffer is nulljava.lang.IllegalArgumentException - if the maximum size is zero or lesspublic static BoundedBuffer decorate(Buffer buffer, int maximumSize)
When the buffer is full, it will immediately throw a
BufferOverflowException on calling add().
buffer - the buffer to decorate, must not be nullmaximumSize - the maximum size, must be size one or greaterjava.lang.IllegalArgumentException - if the buffer is nulljava.lang.IllegalArgumentException - if the maximum size is zero or lesspublic static BoundedBuffer decorate(Buffer buffer, int maximumSize, long timeout)
buffer - the buffer to decorate, must not be nullmaximumSize - the maximum size, must be size one or greatertimeout - the maximum amount of time to wait in millisecondsjava.lang.IllegalArgumentException - if the buffer is nulljava.lang.IllegalArgumentException - if the maximum size is zero or lesspublic java.lang.Object remove()
Bufferremove in interface Bufferremove in class SynchronizedBufferpublic boolean add(java.lang.Object o)
add in interface java.util.Collectionadd in class SynchronizedCollectionpublic boolean addAll(java.util.Collection c)
addAll in interface java.util.CollectionaddAll in class SynchronizedCollectionpublic java.util.Iterator iterator()
SynchronizedCollection
synchronized (coll) {
Iterator it = coll.iterator();
// do stuff with iterator
}iterator in interface java.lang.Iterableiterator in interface java.util.Collectioniterator in class SynchronizedCollectionprivate void timeoutWait(int nAdditions)
public boolean isFull()
BoundedCollectionisFull in interface BoundedCollectiontrue if the collection is fullpublic int maxSize()
BoundedCollectionmaxSize in interface BoundedCollection