Где поймать Исключения, выброшенные из Callable.call()
Возможный дубликат:
Обработка исключений из задач Java ExecutorService
Я использую ExecutorService
из Java для координации потоков.
Для запуска потоков я использую
pool = new ExecutorService(2);
callableResults = pool.invokeAll(threads);
Чтобы собрать результат, я использую future.get()
для каждого потока.
"threads" - это список объектов класса, который реализует Callable
и переопределяет call()
.
Теперь у меня возникла следующая проблема. Метод call()
делает разные исключения. invokeAll()
и future.get()
бросать только InterruptedException
.
Где я могу уловить мои особые исключения, которые я вбрасываю call()
? Или я должен обращаться с ними там? Если выбрано одно из этих исключений, то получается a InterruptedException
?
Ответы
Ответ 1
AFAIR java.util.concurrent.Future.get()
будет бросать ExecutionException
если предоставлено вызываемое исключение в прошлом (исключение хранится в Future
).
Исключение, возникающее при попытке получить результат задачи, которая прервана путем выброса исключения. Это исключение можно проверить с помощью метода Throwable.getCause()
.