Tener esta declaración de espera:¿Cómo diferenciar cuándo espera (tiempo de espera prolongado) salir para notificar o tiempo de espera?
public final native void wait(long timeout) throws InterruptedException;
Podría salir por InterruptedException, o por el tiempo de espera, o porque Notificar/notifyAll método fue llamado en otro hilo, Excepción es fácil de coger, pero ...
Hay ¿Hay alguna forma de saber si la causa de las salidas fue el tiempo de espera o la notificación?
EDIT:
Ésta es una manera complicada que podría funcionar, (aunque no me gusta)
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
Tuve una necesidad similar y en mi caso resultó que un 'Semaphore' era más adecuado; 'Semaphore.tryAcquire (long timeout, TimeUnit unit)' devuelve 'false' si ha transcurrido el tiempo de espera. – Santosh
Semaphore funcionaría a menos que necesite tener la capacidad de esperar, lo cual no es compatible con el contrato público de Semaphore. –