Этот фрагмент кода из Java-параллелизма на практике, я действительно не понимаю.java параллелизм на практике 14.6
@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. Поэтому в большинстве случаев, если поток начинает ждать, он будет ждать всегда.
Я что-то не понимаю?
Извините, для этого вопроса новичка. –
Np чувак. Просто убедитесь, что вы прочитали документы о потоке. Вы будете смущены, и в противном случае это будет труднее. – Gray