在Java中设计一个并发线程时使用Runnable和Callable接口有什么区别,为什么要选择一个呢?
public interface Runnable {
void run();
}
public interface Callable<V> {
V call() throws Exception;
}
Runnable和的应用有什么区别Callable?只有返回参数的区别Callable?
基本上,是的。看到这个问题的答案。和javadoc的Callable。
什么是如果两者具有需要Callable可以做这一切Runnable呢?
因为Runnable界面不能做所有的事情Callable!
Runnable自Java 1.0以来一直存在,但Callable仅在Java 1.5中引入...才能处理Runnable不支持的用例。从理论上讲,Java团队可能已经改变了Runnable.run()方法的签名,但是这会破坏1.5之前的代码的二进制兼容性,在将旧的Java代码迁移到新的JVM时需要重新编码。这是一个很大的NO-NO。Java努力向后兼容...这是Java商业计算最大的卖点之一。
而且,很明显,有一些用例不需要返回结果或抛出一个检查的异常。对于这些用例,使用Runnable比从方法中使用Callable<Void>并返回一个dummy(null)值更简洁call()。