在Java中设计并发线程时,使用Runnable和Callable接口有什么区别,为什么你要选择一个?
Runnable
Callable
Callable接口与Runnable相似,两者均适用于其实例可能由另一个线程执行的类。但是,Runnable不会返回结果,也不能引发已检查的异常。
Runnable和的应用有什么区别Callable?区别仅在于其中包含return参数Callable吗?
return
基本上是。请参阅此问题的答案。和的javadocCallable。
javadocCallable
如果两者Callable都能做到,Runnable那么有什么需要呢?
因为Runnable界面不能做所有能做的事Callable!
Runnable自Java 1.0以来一直存在,但Callable仅在Java 1.5中引入…来处理Runnable不支持的用例。从理论上讲,Java团队可以更改该Runnable.run()方法的签名,但这将破坏与1.5版之前的代码的二进制兼容性,因此在将旧的Java代码迁移到更新的JVM时需要重新编码。那是很大的不。Java致力于向后兼容…这一直是Java商业计算的最大卖点之一。
Runnable.run()
而且,很明显,在某些用例中,任务不需要返回结果或抛出检查异常。对于这些用例,使用Runnable比使用Callable<Void>并返回方法中的dummy(null)值更为简洁call()。
Callable<Void>
dummy(null)
call()