Я пытаюсь реализовать Future.get(long, TimeUnit) с точки зрения TimeUnit.timedWait(Object, long).
Непонятно, как использовать 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()
?