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