有了這個等待聲明:如何區分等待(超時超時)退出通知或超時?
public final native void wait(long timeout) throws InterruptedException;
它可以通過InterruptedException的退出,或超時,或因爲通知/ notifyAll的方法被調用在另一個線程,異常是容易趕上,但...
有有什麼方法可以知道退出原因是超時還是通知?
編輯:
這是一個可以工作,(雖然我不喜歡它),除非你提供一些額外的你無法區分這兩種一個取巧的辦法
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
我也有類似的需求,並在我的情況下,它變成了一個'Semaphore'更適合; 'Semaphore.tryAcquire(long timeout,TimeUnit unit)'如果超時已過,則返回'false'。 – Santosh 2017-06-24 10:52:00
信號燈會工作,除非你需要有等待其不被信號量公共合同支持的能力。 – 2017-12-22 05:33:25