callable 与 runnable 的区别

本文翻译自英语原文

Callable接口比Runnable接口要新一点,它是在 Java 5 的时候发行的。尽管Callable跟Runnable接口都是设计来代表一个任务(task), 这个任务可以被任意线程执行, 但两者间还是有一些明显的差异. 在我看来, 最主要的差异在于Callable可以在内部的call()方法返回执行的结果, 而Runnable则不行

另一个明显的差别是: 是否有能力抛出checked exception. Callable可以抛出checked exception因为它的call()方法抛出了这个异常.

顺便一提, 有个问题经常是随着经典提问Runnable跟Thread之间的差异? 被问出来的, 通常来说FutureTask要跟Callable一起使用来获取异步任务中的结果.

Callable Vs Runnable 接口

上一节中我已经讨论了Callable跟Runnable之间的主要差异, 有人会问: call()与run()方法的差别有哪些? 下面就来谈谈这个问题, 为了便于理解我一点一点讲:

  1. Runnable 比 Callable 古老一点, 前者源于 JDK1.0, 后者源于 Java 5.
  2. Runnable 接口用 run() 方法来描述一个任务(task), 而 Callable 使用 call().
  3. run()方法不会返回结果, 因为它的返回类型是 void. 而 Callable 是个 支持泛型的接口, 当要实现(implement)一个Callable接口的时候, 就会提供一个返回值类型.
  4. run()方法不会抛出 checked excep
    tion 异常, 而 call() 方法可以

这里还有一个很好的总结


Difference between Runnable and Callable in Java.jpg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容