Page 72 - 4657
P. 72
class Q {
int n;
boolean valueSet = false;
synchronized int get() {
if (!valueSet)
try wait();
catch(InterruptedException e):
System.out.println("Got: " + n);
valueSet = false;
notify();
return n;
}
synchronized void put(int n) {
if (valueSet)
try wait(); catch(InterruptedException e);
this.n = n;
valueSet = true;
System.out.println("Put: " + n);
notify();
} }
А от і результат роботи цієї програми, що ясно
показує, що синхронізація досягнута.
С:\> java Pcsynch
Put: 1
Got: 1
Put: 2
Got: 2
Put: 3
Got: 3
Put: 4
Got: 4
Put: 5
Got: 5
Клінч (deadlock)
Клінч - рідка, але дуже труднодоступна помилка, при якій
між двома легковагими процесами існує кільцева залежність від
пари синхронізованих об'єктів. Наприклад, якщо один підпроцес
70