Java: Cómo distinguir entre la activación espuria y el tiempo de espera en espera ()

Aquí hay un caso en el que un hilo está esperando notificar () o un tiempo de espera. Aquí se agrega un bucle while para manejar el despertar espurio.

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 falso despertar y un tiempo de espera? Si es un despertar espurio, necesito regresar y esperar. Y si es un tiempo de espera, necesito salir del circuito.

Puedo identificar fácilmente el caso de notify (), porque estableceré la variable dosleep en false mientras notifique la llamada ().

EDIT: estoy usando la versión 1.4 java, debido a un requisito de proyecto incorporado. No puedo usarCondition ya que solo está disponible la publicación 1.5.

Gracias por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta