Java中Runnable和Callable接口的区别

新手上路,请多包涵

在 Java 中设计并发线程时,使用 RunnableCallable 接口有什么区别,为什么要选择其中一个?

原文由 Scottm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 835
2 个回答

请参阅 此处 的说明。

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

原文由 Jorge Ferreira 发布,翻译遵循 CC BY-SA 3.0 许可协议

RunnableCallable 的应用有什么区别。区别仅在于 Callable 中存在的返回参数吗?

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

如果 Callable 可以做所有 Runnable --- 做的所有事情,那么有什么必要呢?

因为 Runnable 接口 不能 完成 Callable 所做的一切!

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

而且,显然,在某些用例中,任务 不需要 返回结果或抛出已检查的异常。 For those use-cases, using Runnable is more concise than using Callable<Void> and returning a dummy ( null ) value from the call() method .

原文由 Stephen C 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题