Может ли кто-нибудь указать мне на какую-нибудь документацию, которая проясняет, что 'Future.get` с таймаутом 0 ждать не будет?
В документации API для java.util.concurrent.Future
не указано явным образом поведение future.get (0, unit)
. Само по себе утверждение «Ожидает, если необходимо, самое большее заданное время ...» подразумевает, что этот вызов вообще не будет ждать, но с учетом длительного поведения Object.wait (0)
(бесконечное ожидание), я нервничаю из-за поведения «без ожидания» future.get (0, unit)
Сканирование источника некоторых классов, предоставляемых JDK (а именно FutureTask
) Я вижу, что эта конкретная реализация Future
не ждет, когда тайм-аут равен 0.
Я бы хотел сказать
long timeout = Math.max(until - now, 0);
return future.get(timeout, TimeUnit.MILLISECONDS);
, но я нервничаю по поводу реализации Future это как бесконечное ожидание, поэтому вместо этого я явно закодировал его так, как я ожидал, чтобы он работал:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}