17

我知道可调用的调用可以将异常抛出给调用它的父方法,而可运行的情况并非如此。

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

4

2 回答 2

17

的重点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
}
于 2012-09-06T18:10:05.757 回答
6

Callable.call() 不能是最底部的堆栈帧。它总是由另一个方法调用,然后将捕获异常。Callable通常应该用于异步计算值,然后通过Future对象获取它们。当您尝试获取' 值时,该操作可能会引发稍后重新引发的异常。Future

Runnable只是应该运行一个不返回任何内容的操作。所有异常处理都应该在内部完成,Runnable因为不清楚Runnable.run()应该如何处理抛出的任何异常。(来自 a 的异常Callable通常会返回给调用者Future

于 2012-09-06T18:13:06.980 回答