如何在Callable中完成异常处理

时间:2012-09-06 17:50:01

标签: java multithreading

我理解callable的调用可以将异常抛给调用它的父方法,而runnable不是这样。

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

2 个答案:

答案 0 :(得分:15)

Callable的要点是将您的异常抛出到您的调用线程中,例如,当您获得Future的{​​{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
}

答案 1 :(得分:6)

Callable.call() 无法成为最底层的堆栈框架。它总是由另一个方法调用,然后捕获异常。 Callable通常应该用于异步计算值,然后使用Future对象获取它们。操作可能抛出异常,当您尝试获取Future的值时,该异常稍后会重新抛出。

Runnable只是运行一个不返回任何内容的操作。所有异常处理都应该在Runnable内完成,因为不清楚应该如何处理Runnable.run()中抛出的任何异常。 (Callable的例外情况通常会通过Future

返回给调用者