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

Где поймать Исключения, выброшенные из 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?

4b9b3361

Ответ 1

AFAIR java.util.concurrent.Future.get() будет бросать ExecutionException если предоставлено вызываемое исключение в прошлом (исключение хранится в Future).

Исключение, возникающее при попытке получить результат задачи, которая прервана путем выброса исключения. Это исключение можно проверить с помощью метода Throwable.getCause().