Поведение future.get с таймаутом 0

Может ли кто-нибудь указать мне на какую-нибудь документацию, которая проясняет, что '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();
   }
15
задан skaffman 17 February 2012 в 17:41
поделиться