Вопрос

Может ли кто-нибудь указать мне на какую-то документацию, в которой четко указано, что Future.get с таймаутом 0 ждать не будет?

В документации API для java.util.concurrent.Future не указано явным образом поведение future.get(0, unit).Само по себе утверждение «Ожидает, если необходимо, самое большее заданное время ...» подразумевает, что этот вызов вообще не будет ждать, но, учитывая длительное поведение Object.wait(0) (бесконечное ожидание), я нервничаю, чтобы зависетьо поведении генерального кодового тега "без ожидания"

Просматривая источник некоторых классов, предоставляемых JDK (например, future.get(0, unit)), я вижу, что эта конкретная реализация FutureTask не ждет, когда тайм-аут равен 0.

Я бы хотел сказать

родовое слово

но я нервничаю из-за того, что будущее реализует это как бесконечное ожидание, поэтому вместо этого я явно закодировал его так, как я ожидал, что это будет работать:

родовое слово
Это было полезно?

Решение

<цитата>

При необходимости ожидает самое большее заданное время…

Ожидание не более нулевых единиц времени вообще не означает ожидания.Это не подразумеваемый намек, это явная гарантия.

Другие советы

<цитата>

Может ли кто-нибудь указать мне на какую-то документацию, в которой четко указано, что Future.get с таймаутом 0 ждать не будет?

Я могу указать вам на код, если это поможет.Заглянув в java.util.concurrent.FutureTask, а затем на AbstractQueuedSynchronizer, я вижу следующий цикл, который я сократил, чтобы показать соответствующие биты:

родовое слово

Это означает, что если nanosTimeout равен 0 (что будет, если вы передадите 0 для получения), то он попытается получить будущее один раз, а затем тайм-аут и вернет false.

Если вам станет легче, вы можете установить время ожидания равным 1 наносекунде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top