Операционные системы. Процессы и потоки. Илюшкин Б.И. - 67 стр.

UptoLike

Составители: 

}
}
Следует учесть, что синхронизированные методы выполняются мед-
леннее несинхронизированных. В качестве примера использования
синхронизированных методов внутри класса рассмотрим нижеприве-
денный код [6].
// BufferExample.java
// Координация потоков, записывающих в буфер и читающих из буфера
// с использованием методов wait() и notifyAll()
// Класс, представляющий буфер для хранения одного значения
class Buffer {
private int value = 0;
private boolean full = false; // буфер пуст
public synchronized void put(int a)
throws InterruptedException {
while (full)
wait();
value = a;
full = true; // буфер полон
notifyAll();
}
public synchronized int get()
throws InterruptedException {
int result;
while (!full)
wait();
result = value;
full = false;
notifyAll();
return result;
}
67