Как я могу знать, как задача завершилась при использовании класса Future Java
Я использую Java-класс Future для выполнения задачи, но метод isDone возвращает true, если задача выполнена. Завершение может быть связано с обычным завершением, исключением или отменой - во всех этих случаях этот метод вернет true.
Есть ли способ узнать, закончилось ли оно из-за исключения или потому, что оно успешно завершилось?
3 ответа
Когда вы вызываете метод Future.get(), есть 4 возможных результата:
- Вы получаете значение результата
- Вы получаете CancellationException - если вычисление было отменено (например, вызывается Future.cancel(true))
- Вы получаете ExecutionException - если вычисление бросило исключение
- Вы получаете InterruptedException - если текущий поток был прерван во время ожидания (например, вызывается executor.shutdownNow())
Вы можете просто попытаться получить значение - get
Затем метод либо генерирует исключение, либо возвращает значение.
Я использовал его в своем коде, и единственный способ определить, действительно ли задача успешно выполнена, - это использовать get()