Может ли кто-нибудь указать мне на какую-то документацию, в которой ясно, что "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);
но я нервничаю из-за того, что будущее реализует это как бесконечное ожидание, поэтому вместо этого я явно закодировал его так, как я ожидал, что он будет работать:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}