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)
Callable.call()
不能是最底层的堆栈框架.它总是由另一个方法调用,然后捕获异常.Callable
通常应该用于异步计算值,然后用Future
对象获取它们.该操作可能会抛出一个异常,当您尝试获取该Future
值时,该异常将在以后重新抛出.
Runnable
只是应该运行一个不返回任何东西的操作.所有异常处理都应该在内部进行,Runnable
因为不清楚Runnable.run()
应该如何处理任何抛出的异常.(a的异常Callable
通常会返回给调用者Future
)