実際のJava並行性からのこのコードスニペット、私は本当に理解していません。
@ThreadSafe
public class BoundedBuffer<V> extends BaseBoundedBuffer<V> {
// CONDITION PREDICATE: not-full (!isFull())
// CONDITION PREDICATE: not-empty (!isEmpty())
public BoundedBuffer(int size) { super(size); }
// BLOCKS-UNTIL: not-full
public synchronized void put(V v) throws InterruptedException {
while (isFull())
wait();
doPut(v);
notifyAll();
}
// BLOCKS-UNTIL: not-empty
public dsynchronize V take() throws InterruptedException {
while (isEmpty())
wait();
V v = doTake();
notifyAll();
return v;
}
}
putメソッドとtakeメソッドは同期されています。あるスレッドがputメソッドで待機している場合、誰もtakeまたはputメソッドに入ることができないため、ほとんどの場合、スレッドが待機を開始すると、それは永遠に待機します。
私は何かを理解していませんか?