Как выполняется обработка исключений в Callable

Я понимаю, что вызываемый вызов может выдать исключение родительскому методу, вызывающему его, что не относится к 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)