2012-03-02 13 views
13

Duplicar posible:
Handling exceptions from Java ExecutorService tasksdónde coger excepciones que devuelve Callable.call()

uso el ExecutorService de Java para coordinar Hilos. Para iniciar los hilos utilizo

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

Para recoger el resultado, utilizo future.get() para cada hilo. "hilos" es una lista de objetos de una clase que implementa Callable e invalida call().

Ahora tengo el siguiente problema. El método call() arroja varias excepciones específicas. invokeAll() y future.get() arrojan solo InterruptedException.

¿Dónde puedo encontrar mis excepciones específicas que incluyo en call()? ¿O tengo que manejarlos allí? Si se lanza una de esas excepciones, ¿el resultado es un InterruptedException?

+1

He leído esto antes, pero no veo que él use Llamable y llame() también? Tal vez lo he supervisado? editar: correcto. Lo he supervisado. lo siento. – nano7

+2

En esta respuesta: http://stackoverflow.com/a/2248166/118846 –

+1

Utiliza Runnable pero la captura de excepciones es la misma. – Gray

Respuesta

23

AFAIR java.util.concurrent.Future.get() arrojaremos ExecutionException si se proporciona una excepción invocable lanzada anteriormente (la excepción se almacena en el Future).

Se produjo una excepción al intentar recuperar el resultado de una tarea que abortó arrojando una excepción. Esta excepción se puede inspeccionar utilizando el método Throwable.getCause().

Cuestiones relacionadas