Я понимаю, что вызываемый вызов может выдать исключение родительскому методу, вызывающему его, что не относится к runnable.
Интересно, как это метод потока и является самым нижним методом стека потоков.
Ответ 1
Точка Callable заключается в том, чтобы ваше исключение выбрасывалось в вызывающий поток, например, когда вы получаете результат будущего который вы отправили на свой номер.
public class CallableClass implements Callable<String> {
...
}
ExecutorService executor = new ScheduledThreadPoolExecutor(5);
Future<Integer> future = executor.submit(callable);
try {
System.out.println(future.get());
} catch (Exception e) {
// do something
}
Ответ 2
Callable.call() не может быть самым нижним фреймом стека. Он всегда вызывается другим методом, который затем поймает исключение. Callable обычно следует использовать для асинхронного вычисления значений, а затем для получения их с объектом Future. Операция может вызвать исключение, которое позже будет восстановлено при попытке получить значение Future.
Runnable просто предполагается запустить операцию, которая ничего не возвращает. Вся обработка исключений должна выполняться в пределах Runnable, поскольку неясно, как следует обрабатывать любые исключения, возникшие в Runnable.run(). (Исключение из Callable обычно возвращается вызывающему абоненту с помощью Future)