我知道可调用的调用可以将异常抛出给调用它的父方法,而可运行的情况并非如此。
我想知道如何,因为它是一个线程方法,并且是线程堆栈的最底层方法。
的重点Callable
是将异常抛出到调用线程,例如,当您获得 a 的结果时Future
,您将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
}
Callable.call()
不能是最底部的堆栈帧。它总是由另一个方法调用,然后将捕获异常。Callable
通常应该用于异步计算值,然后通过Future
对象获取它们。当您尝试获取' 值时,该操作可能会引发稍后重新引发的异常。Future
Runnable
只是应该运行一个不返回任何内容的操作。所有异常处理都应该在内部完成,Runnable
因为不清楚Runnable.run()
应该如何处理抛出的任何异常。(来自 a 的异常Callable
通常会返回给调用者Future
)