Java中Runnable和Callable接口的区别
在设计Java中的并发线程时使用Runnable和Callable接口有什么区别,为什么你会选择一个呢?
在这里看到解释。
Callable接口类似于Runnable,因为它们都是为其实例可能由另一个线程执行的类设计的。 但是,Runnable不会返回结果,也不会抛出检查的异常。
Runnable
和Callable
的应用程序有什么区别? 仅与Callable
的返回参数有所不同?
基本上,是的。 看到这个问题的答案。 还有Callable
的javadoc。
如果Callable
可以完成Runnable
所做的所有工作,那么两者都需要什么?
因为Runnable
接口不能完成Callable
所做的一切!
自Java 1.0以来, Runnable
就一直存在,但Callable
仅在Java 1.5中引入...来处理Runnable
不支持的用例。 理论上,Java团队可能已经改变了Runnable.run()
方法的签名,但是这会破坏1.5之前的代码的二进制兼容性,在将旧的Java代码迁移到较新的JVM时需要重新编码。 这是一个很大的否。 Java努力向后兼容...这是Java商业计算最大的卖点之一。
而且,显然,有些用例不需要返回结果或抛出检查的异常。 对于这些用例,使用Runnable
比使用Callable<Void>
更简洁,并从call()
方法返回一个虚拟( null
)值。
Callable
需要实现call()
方法,而Runnable
需要实现run()
方法。 Callable
可以返回一个值,但Runnable
不能。 Callable
可以抛出检查异常,但Runnable
不能。 Callable
可以与ExecutorService#invokeXXX(Collection<? extends Callable<T>> tasks)
方法一起使用,但Runnable
不能。
public interface Runnable {
void run();
}
public interface Callable<V> {
V call() throws Exception;
}
上一篇: The difference between the Runnable and Callable interfaces in Java
下一篇: How to implement simple threading with a fixed number of worker threads