我正在尝试根据TimeUnit.timedWait(Object, long)来实现Future.get(long, TimeUnit ) 。
目前尚不清楚如何以TimeUnit.timedWait(Object, long)
处理虚假唤醒而不丢失 TimeUnit 的纳秒组件的方式使用。通常你会做这样的事情:
public V get(long timeout, TimeUnit unit)
{
long expirationTime = new Date().getTime() + unit.toMillis(timeout);
while (!condition)
{
long timeLeft = expirationTime - new Date().getTime();
if (timeLeft <= 0)
throw new TimeoutException();
unit.timedWait(object, timeLeft);
}
}
但是你失去了纳秒的分量。如果每个人都只是放弃纳秒组件,那么TimeUnit
支持纳秒和提供的意义TimeUnit.timedWait()
何在?