Wenn ich eine Zukunft ausführen und eine Ausnahme auslösen, habe ich diese Ausnahme beim Aufruf Future.get
als ExecutionException
.Wo wird eine Exception ausgelöst, während das Ergebnis einer Zukunft mit einem Timeout gesetzt wird?
Aber wo geht die ausgelöste Ausnahme, wenn ich rufe Future.get(timeout)
und die Ausnahme ausgelöst wird, nachdem das Timeout abgelaufen ist, wie:
Future<String> future = Executors.newSingleThreadExecutor().submit(() -> {
Thread.sleep(200);
System.out.println("COMPLETED");
throw new Exception("ERROR");
});
try {
future.get(100, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
e.printStackTrace();
}
Thread.sleep(1_000);
Irgendwelche Ideen? TIA!
Nun, es wird geworfen und gefangen auf dem Thread Ihres Executors. –
@ValentinWaeselynck So, um z.B. log es, ich muss meinen eigenen Executor implementieren? – t777
Nein, Sie brauchen nur einen 'try {} catch() {}' Block in Ihrem Lambda. – AJNeufeld