Despertares espúrios em Java realmente acontecem?
Vendo várias questões relacionadas a bloqueio e (quase) sempre encontrando o loop por causa de termos de despertares espúrios1 Eu imagino, alguém já experimentou esse tipo de ativação (assumindo um ambiente decente de hardware / software, por exemplo)?
Eu sei que o termo "espúrio" significa nenhuma razão aparente, mas quais podem ser as razões para esse tipo de evento?
(1 Nota: Eu não estou questionando a prática de looping.)
Editar: Uma pergunta auxiliar (para quem gosta de exemplos de código):
Se eu tenho o seguinte programa, e eu o executo:
<code>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(); } } } </code>
O que posso fazer para acordar issoawait
espúrios sem esperar para sempre por um evento aleatório?