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

你可能感兴趣的:(callable 与 runnable 的区别)