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
?
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.
Utilizing Callable to Throw Exceptions One of the benefits of the Callable interface is the fact that it enables us to throw exceptions that are handled outside of the separate thread of execution. For example, suppose we alter our implementation of Callable to force an exception in our call() method.
Yes, it can be done by using Thread. UncaughtExceptionHandler. When a thread is about to terminate due to an uncaught exception the Java Virtual Machine will query the thread for its UncaughtExceptionHandler usingThread.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With