Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
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)
Клинч — редкая, но очень трудноуловимая ошибка, при которой между двумя легковесными процессами существует кольцевая зависимость от пары синхронизированных объектов. Например, если один подпроцесс получает управление объектом X, а другой — объектом Y, после чего Х пытается вызвать любой синхронизированный метод Y, этот вызов, естественно блокируется. Если при этом и Y попытается вызвать синхронизированный метод X, то программа с такой структурой подпроцессов окажется заблокированной навсегда. В самом деле, ведь для того, чтобы один из подпроцессов захватил нужный ему объект, ему нужно снять свою блокировку, чтобы второй подпроцесс мог завершить работу.
Сводка функций программного интерфейса легковесных процессов
Ниже приведена сводка всех методов класса Thread, обсуждавшихся в этой главе.
Дата публикования: 2015-10-09; Прочитано: 173 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!