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
?
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()
.