package net.jcip.examples;
import net.jcip.annotations.*;
/**
* SleepyBoundedBuffer
*
* Bounded buffer using crude blocking
*
* @author Brian Goetz and Tim Peierls
*/
@ThreadSafe
public class SleepyBoundedBuffer extends BaseBoundedBuffer {
int SLEEP_GRANULARITY = 60;
public SleepyBoundedBuffer() {
this(100);
}
public SleepyBoundedBuffer(int size) {
super(size);
}
public void put(V v) throws InterruptedException {
while (true) {
synchronized (this) {
if (!isFull()) {
doPut(v);
return;
}
}
Thread.sleep(SLEEP_GRANULARITY);
}
}
public V take() throws InterruptedException {
while (true) {
synchronized (this) {
if (!isEmpty())
return doTake();
}
Thread.sleep(SLEEP_GRANULARITY);
}
}
}