在 Java 中设计并发线程时,使用 Runnable
和 Callable
接口有什么区别,为什么要选择其中一个?
原文由 Scottm 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java 中设计并发线程时,使用 Runnable
和 Callable
接口有什么区别,为什么要选择其中一个?
原文由 Scottm 发布,翻译遵循 CC BY-SA 4.0 许可协议
Runnable
和Callable
的应用有什么区别。区别仅在于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 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
请参阅 此处 的说明。