如何在Callable中完成异常处理

use*_*415 15 java multithreading

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

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

Den*_*ret 15

重点Callable是将您的异常抛出到您的调用线程,例如,当您获得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
}
Run Code Online (Sandbox Code Playgroud)


mai*_*n-- 6

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

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