EDIT:
How to catch an Exception from a thread - this is not a duplication. The link refers to direct thread (son thread) which it's not the case here! We are talking about indirect (grandson thread). The son thread is a closed JAR
(I do not have write access)
I have the following method: f1
which I don't have write access to (It's a closed JAR
).
f1
creates and runs a task on new thread which throws exception.
On the main
method, I must call f1
on new thread. I need to be able to catch all the exceptions which were thrown from child threads of f1
.
In other words, how do I catch exceptions from grandson
thread without changing the son
thread.
main method opens new thread and call:
|
V
f1 method opens new thread and call:
|
V
anonymous method which throws exception
Example code:
private static void f1() {
Executors.newSingleThreadExecutor()
.submit(() -> {
try {
throw new Exception("exception from anonymous thread");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
});
}
public void main() {
final Future<?> submit = Executors.newSingleThreadExecutor()
.submit(() -> f1());
try {
submit.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}