25

Possible Duplicate:
Handling exceptions from Java ExecutorService tasks

I use the ExecutorService from Java for coordinating Threads. For starting the threads I use

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

To collect the result, I use future.get() for each thread. "threads" is a List of Objects from a Class which implements Callable and overrides call().

Now Ive got the following problem. The method call() does throw various specific exceptions. invokeAll() and future.get() throw only InterruptedException.

Where can I catch my specific exceptions which I throw in call()? Or do I have to handle them there? If one of those exceptions is thrown, is the result then a InterruptedException?

Community
  • 1
  • 1
nano7
  • 2,395
  • 6
  • 33
  • 51

1 Answers1

38

AFAIR java.util.concurrent.Future.get() will throw ExecutionException if provided callable threw exception in the past (the exception is stored in the Future).

Exception thrown when attempting to retrieve the result of a task that aborted by throwing an exception. This exception can be inspected using the Throwable.getCause() method.

Tomasz Nurkiewicz
  • 311,858
  • 65
  • 665
  • 652
  • The very reason to use `ExecutorService` is its ability to run without blocking. `get()`, on the other hand, is blocking until the task is executed. Seems like this is one of the major drawbacks of `ExecutorService` – Farid Apr 02 '21 at 10:53