有了这个等待声明:如何区分等待(超时超时)退出通知或超时?
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