Увидев различные связанные с блокировкой вопросы и (почти) всегда находив "цикл из-за ложных пробуждений" 1 Интересно, кто-нибудь испытал такое пробуждение (предполагая приличную аппаратную/программную среду например)?
Я знаю, что термин "ложный" означает отсутствие видимой причины, но каковы могут быть причины такого рода событий?
( 1 Примечание: я не стану сомневаться в практике циклирования.)
Изменить: Вспомогательный вопрос (для тех, кто любит образцы кода):
Если у меня есть следующая программа, и я запустил ее:
public class Spurious {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
Condition cond = lock.newCondition();
lock.lock();
try {
try {
cond.await();
System.out.println("Spurious wakeup!");
} catch (InterruptedException ex) {
System.out.println("Just a regular interrupt.");
}
} finally {
lock.unlock();
}
}
}
Что я могу сделать, чтобы разбудить этот await
ложно, не ожидая навсегда случайного события?