如何在可调用中完成异常处理

2022-09-03 01:27:57

我知道callable的调用可以将异常抛给调用它的父方法,而runnable不是这种情况。

我想知道如何,因为它是一个线程方法,是线程堆栈中最底层的方法。


答案 1

Callable 的要点是将异常抛出到调用线程,例如,当您获得提交 .Futurecallable

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() 不能是最底部的堆栈帧。它始终由另一个方法调用,然后该方法将捕获异常。 通常应该用于异步计算值,然后使用对象获取它们。该操作可能会引发一个异常,稍后当您尝试获取 的值时,该异常会被重击。CallableFutureFuture

Runnable只是应该运行一个不返回任何内容的操作。所有异常处理都应在 内完成,因为目前尚不清楚应如何处理任何抛出的异常。(来自 的异常通常与RunnableRunnable.run()CallableFuture)