Как выполняется обработка исключений в 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
)