Mit dieser Warte Erklärung:Wie kann unterschieden werden, wenn wait (long timeout) für Notify oder Timeout beendet wird?
public final native void wait(long timeout) throws InterruptedException;
Es wird von InterruptedException verlassen könnte, oder durch Timeout oder weil dieser Artikel/notifyAll Methode in einem anderen Thread aufgerufen wurde, Ausnahme ist leicht zu fangen, aber ...
Es Gibt es eine Möglichkeit zu wissen, ob die Ursache der Ausfälle Timeout oder Notify war?
EDIT:
Dies ist eine schwierige Art und Weise, die funktionieren könnte (obwohl ich es nicht mögen)
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
Ich hatte ein ähnliches Bedürfnis und in meinem Fall stellte sich heraus, dass ein 'Semaphore' besser geeignet war; 'Semaphore.tryAcquire (langes Timeout, TimeUnit-Einheit)' gibt 'false' zurück, wenn das Timeout abgelaufen ist. – Santosh
Semaphore funktioniert nur, wenn Sie warten müssen, was nicht durch den öffentlichen Semaphore-Vertrag unterstützt wird. –