Avere questa dichiarazione di attesa:Come distinguere quando si attende (lungo timeout) l'uscita per la notifica o il timeout?
public final native void wait(long timeout) throws InterruptedException;
Potrebbe uscire dal InterruptedException, o per timeout, o perché Notifica/notifyAll metodo è stato chiamato in un altro thread, Eccezione è facile prendere, ma ...
Ci è un modo per sapere se la causa delle uscite era il timeout o la notifica?
EDIT:
Questo è un modo ingannevole che potrebbe funzionare, (anche se non mi piace)
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
Avevo un'esigenza simile e nel mio caso si è scoperto che un "semaforo" era più adatto; 'Semaphore.tryAcquire (long timeout, TimeUnit unit)' restituisce 'false' se il timeout è scaduto. – Santosh
Il semaforo funzionerebbe a meno che non sia necessario attendere, cosa che non è supportata dal contratto pubblico del semaforo. –