Как работает 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, независимо от того, сколько раз вы его называете