我已经明白了之间的区别Runnable
and Callable
Java 中的接口。从 Java 1.5 开始,添加了额外的功能Runnable
接口并被调用Callable
以保持向后兼容性。
我的问题是现在我们有Callable
接口,我们应该一直使用它吗?不使用的用例有哪些Callable
并使用Runnable
?
(This https://stackoverflow.com/questions/141284/the-difference-between-the-runnable-and-callable-interfaces-in-java有一篇很好的文章介绍了它们之间的区别)
两者都有其用途,并且都受到 java.util.concurrent 中的 Executor 框架的支持。 Runnable 已经存在了很长时间,但它仍然在使用并且没有被气馁。
可调用对象可以抛出异常并返回值,这使得它们成为结果承载任务的更好抽象(例如从网络获取资源、执行昂贵的值计算等)[来自Java 并发实践戈茨、布洛赫等人。 al.,Java 并发性的标准工作]。
因此,如果您正在设计 API,我建议尽可能使用 Callables。如果您确定任务不会返回值并且不会引发异常,那么 Runnable 也是一个有效的选择。这里没有黑白之分,特别是因为 Runnables 可以很容易地包装在 Callables 中,反之亦然。
顺便说一句,请注意您的 Callable 实现不需要声明throws Exception
;事实上 Callable 本身声明它只是为了允许实现者抛出任何已检查的异常。不过,仅依赖 Callable 接口的 Callable 调用者必须编写异常处理代码。
另请注意,Callables 不需要返回值;你可以简单地声明你的 Callable 返回Void
(大写'V
').
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)