Исключение во время вызываемого исполнения - PullRequest
5 голосов
/ 07 декабря 2011

У меня есть следующий Callable:

public class Worker implements Callable<Boolean>{

   @Override
   public Boolean call(){
      boolean success=true;

      //do Something
     return success;
   }

}

Теперь я выполняю это:

Worker worker - new Worker();
Future<Boolean> submit = executor.submit(worker);

Я храню отправку в виде hashMap для некоторой операции, которая должна быть выполнена где-то в коде.

Как узнать, произошло ли исключение в функции worker.call()?

Будет ли submit.isCancelled() возвращать true, если произошло какое-то исключение, и false, если все работает нормально?

Ответы [ 4 ]

13 голосов
/ 07 декабря 2011

Когда вы звоните Future.get(), ваше исключение будет заключено в ExecutionException.

7 голосов
/ 07 декабря 2011

Как указано в документации , Future<V> перезапустит исключение, которое произошло во время .call() (хотя оно заключено в ExecutionException), и isCancelled() все равно будет ложным в этом случай.

5 голосов
/ 07 декабря 2011

В Guava Librairies , есть интерфейс FutureCallback, который имеет метод onFailure(Throwable t), который должен вас заинтересовать

Добавление библиотек Google Guava в проект - пустая трата времени: -)

2 голосов
/ 07 декабря 2011

submit.get () сгенерирует ExecutionException

...