Где перехватывать исключения из Callable.call ()


person nano7    schedule 02.03.2012    source источник
comment
Я читал это раньше, но не видел, чтобы он также использовал Callable и call ()? Может, я за этим следил !? редактировать: правильно. Я наблюдал за этим. Извините.   -  person nano7    schedule 02.03.2012
comment
В этом ответе: stackoverflow.com/a/2248166/118846   -  person Mikko Maunu    schedule 02.03.2012
comment
Он использует Runnable, но ловушка исключений такая же.   -  person Gray    schedule 02.03.2012
comment
Future.get() бросает InterruptedException и ExecutionException. Вам нужно внимательно прочитать javadocs.   -  person skaffman    schedule 02.03.2012
comment
answer (stackoverflow.com/a/2248166/302916) делает.   -  person Brian Roach    schedule 02.03.2012
comment
да. Прости. Я видел только InterruptedException.   -  person nano7    schedule 02.03.2012


Ответы (1)


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

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

person Tomasz Nurkiewicz    schedule 02.03.2012
comment
Сама причина использования ExecutorService - это его способность работать без блокировки. get(), с другой стороны, блокируется до тех пор, пока задача не будет выполнена. Похоже, это один из главных недостатков ExecutorService - person Farid; 02.04.2021