Безопасно ли указывать отрицательный тайм-аут для java.util.concurrent.Future.get(long, TimeUnit)
? В документации говорится
Ожидает, если необходимо, не более заданного времени для завершения вычисления, а затем извлекает его результат, если он доступен.
Означает ли это, что он будет работать с отрицательными значениями, или это утверждение распространяется только на неотрицательные случаи? Поведение, которое я ожидал бы, состояло бы в том, чтобы вернуть результат, если он доступен, или тайм-аут немедленно в противном случае. Такая ситуация может возникнуть, если мы хотим рассчитать таймаут для абсолютного момента времени, а он уже прошел. Конечно, я могу использовать max{timeout, 0}
, но действительно ли это необходимо? Тесты в моей среде показали, что это работает, но гарантируется ли это? https://stackoverflow.com/questions/9332904/behavior-of-future-get-with-0-timeout указывает, что это должно иметь место для тайм-аута 0.
Или, говоря другими словами: предположим, что результат Future
доступен. Будет ли реализация Future
несовместимой, если get(long, TimeUnit)
, вызванный с отрицательным тайм-аутом, сделает что-то еще, кроме возврата этого результата?
Future
— это интерфейс, так что никаких гарантий вы там вряд ли получите. Нижний ответ на вопрос, на который вы ссылаетесь, показывает, что отрицательные значения обрабатываются так же, как 0 в случаеFuteureTask
. - person Keppil   schedule 14.02.2014