Aquí hay un caso en el que un subproceso está esperando notificación() o un tiempo de espera excedido. Aquí se agrega un ciclo while para manejar el despertar espurio.Java: cómo distinguir entre el despertar espúreo y el tiempo de espera en espera()
boolean dosleep = true;
while (dosleep){
try {
wait(2000);
/**
* Write some code here so that
* if it is spurious wakeup, go back and sleep.
* or if it is timeout, get out of the loop.
*/
} catch (InterruptedException e) {
e.printStackTrace();
}
}
En este caso, ¿cómo puedo distinguir entre un despertar espurio y un tiempo de espera? Si se trata de un despertar espurio, necesito volver y esperar. Y si es un tiempo de espera, necesito salirme del lazo.
Puedo identificar fácilmente el caso de notify(), porque estableceré la variable dosleep en falso mientras notifica() la llamada.
EDITAR: estoy usando la versión 1.4 de Java, debido a los requisitos del proyecto incorporado. No puedo usar Condition
ya que está disponible solo después de 1.5.
Gracias de antemano.
Bringer128 tiene una solución razonable, pero, me pregunto por qué quieres hacer esto. La interrupción generalmente no es una "activación espuria", es una señal para interrumpir y detener el proceso. – user949300
No se trata de interrupción. Una "activación espuria" puede venir en cualquier momento. Si se produce al mismo tiempo después de ingresar a la espera(), entonces no quiero salir del ciclo. Necesito asegurarme de que aguardo el tiempo de 'expiración' antes de salir del ciclo –
que veo. No te interrumpirán, pero otro hilo está llamando a notify() o, más probablemente, notifyAll(), y te despiertan. – user949300