Java 中可运行接口和可调用接口之间的区别

在 Java 中设计并发线程时,使用 和 接口有什么区别,为什么会选择一个而不是另一个?RunnableCallable


答案 1

请参阅此处的说明。

Callable 接口类似于 Runnable,因为两者都是为实例可能由另一个线程执行的类设计的。但是,Runnable 不会返回结果,也不能引发已检查的异常。


答案 2

和 的应用有什么区别。是否仅与 ? 中的返回参数存在差异RunnableCallableCallable

基本上,是的。请参阅问题的答案。以及 Callable 的 javadoc

如果两者都能做所有的事情,那么两者都需要什么?CallableRunnable

因为界面不能做所有的事情!RunnableCallable

Runnable从Java 1.0开始就已经存在了,但只是在Java 1.5中引入的...以处理不支持的用例。从理论上讲,Java团队可以更改该方法的签名,但这会破坏与1.5之前代码的二进制兼容性,在将旧的Java代码迁移到较新的JVM时需要重新编码。这是一个很大的禁忌。Java努力向后兼容...这一直是Java在商业计算方面最大的卖点之一。CallableRunnableRunnable.run()

而且,显然,在有些用例中,任务不需要返回结果或引发已检查的异常。对于这些用例,使用比使用和返回方法中的虚拟 () 值更简洁。RunnableCallable<Void>nullcall()