web-dev-qa-db-fra.com

Où attraper les exceptions lancées par Callable.call ()

Duplicata possible:
Gestion des exceptions de Java ExecutorService tâches

J'utilise le ExecutorService de Java pour coordonner les threads. Pour démarrer les threads, j'utilise

pool = new ExecutorService(2);
callableResults = pool.invokeAll(threads);

Pour collecter le résultat, j'utilise future.get() pour chaque thread. "threads" est une liste d'objets d'une classe qui implémente Callable et remplace call().

Maintenant, j'ai le problème suivant. La méthode call() lève diverses exceptions spécifiques. invokeAll() et future.get() ne lancent que InterruptedException.

Où puis-je trouver mes exceptions spécifiques que je lance dans call()? Ou dois-je les gérer là-bas? Si l'une de ces exceptions est levée, le résultat est-il alors un InterruptedException?

22
nano7

AFAIR Java.util.concurrent.Future.get() lancera ExecutionException si fourni appelable a lancé une exception dans le passé (l'exception est stockée dans le Future).

Exception levée lors de la tentative de récupération du résultat d'une tâche qui a été abandonnée en lançant une exception. Cette exception peut être inspectée en utilisant la méthode Throwable.getCause().

34