Подтвердить что ты не робот

Java - Future.get() несколько вызовов

Как работает Java Future.get() в том случае, если он вызывается несколько раз после завершения задачи? Возвращает ли тот же результат? Или бросает ExecutionException снова и снова с тем же исключением, если вычисление завершилось неудачно? Я ничего не могу найти в документах об этом!

4b9b3361

Ответ 1

Вы можете вызывать get() на Future так часто, как вам нравится, и он будет блокироваться только в том случае, если задача, которая создает результат, еще не завершена.

Если задача уже завершена, она сразу же вернет результат задачи.

Если задача завершилась с исключением, вызов get() будет вызывать ExecutionException каждый раз, когда вы его вызываете.

Ответ 2

Я ничего не могу найти в документах об этом!

Вы читали их? потому что, когда я их читаю, я получил ответ, и вот он...

V get()
throws InterruptedException,
      ExecutionException

Ожидает, если это необходимо для завершения вычисления, а затем извлекает его результат.

Returns:
    the computed result

Throws:
    CancellationException - if the computation was cancelled
    ExecutionException - if the computation threw an exception
    InterruptedException - if the current thread was interrupted while waiting

Если Computation не завершен, он будет ждать, и если он уже завершен, он вернет результат ASAP, независимо от того, сколько раз вы его называете