Я не верю, что есть стандартная «ловушка», чтобы добраться до этих исключений при использовании submit()
.Однако, если вам требуется поддержка submit()
(что звучит разумно, учитывая, что вы используете Callable
), вы всегда можете обернуть Callables и Runnables:
ExecutorService executor = new ThreadPoolExecutor(1, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>()) {
@Override
public <T> Future<T> submit(final Callable<T> task) {
Callable<T> wrappedTask = new Callable<T>() {
@Override
public T call() throws Exception {
try {
return task.call();
}
catch (Exception e) {
System.out.println("Oh boy, something broke!");
e.printStackTrace();
throw e;
}
}
};
return super.submit(wrappedTask);
}
};
Конечно, этот метод работает толькоесли вы тот, кто строит ExecutorService
в первую очередь.Кроме того, не забудьте переопределить все три варианта submit()
.