class BoundedBufferMonitor {
final int sizeBuf = 10;
double[] buffer = new double[sizeBuf];
int inBuf = 0, outBuf = 0, count = 0;
public synchronized void deposit(double value) {
while (count == sizeBuf) // buffer full
Util.myWait(this);
buffer[inBuf] = value;
inBuf = (inBuf + 1) % sizeBuf;
count++;
if (count == 1) // items available for fetch
notify();
}
public synchronized double fetch() {
double value;
while (count == 0) // buffer empty
Util.myWait(this);
value = buffer[outBuf];
outBuf = (outBuf + 1) % sizeBuf;
count--;
if (count == sizeBuf - 1) // empty slots available
notify();
return value;
}
}