Java 面试题
目录

Java 中 Runnable 和 Callable 的区别是什么?

· 约 3 分钟读完 · 第 52 / 274 章

推荐答案

在 Java 中,Runnable 和 Callable 都是用于多线程编程的接口,但它们有以下主要区别:

  1. 返回值:

    • Runnable 的 run() 方法没有返回值。
    • Callable 的 call() 方法可以返回一个结果,并且可以抛出异常。
  2. 异常处理:

    • Runnable 的 run() 方法不能抛出受检异常(checked exception)。
    • Callable 的 call() 方法可以抛出受检异常。
  3. 使用场景:

    • Runnable 通常用于不需要返回结果的异步任务。
    • Callable 通常用于需要返回结果或处理异常的异步任务。
  4. 线程池支持:

    • Runnable 可以通过 ExecutorService 的 execute() 方法提交任务。
    • Callable 可以通过 ExecutorService 的 submit() 方法提交任务,并返回一个 Future 对象,用于获取任务执行结果。

本题详细解读

Runnable 接口

Runnable 是 Java 中最基础的线程任务接口,它只有一个 run() 方法,用于定义线程执行的任务。由于 run() 方法没有返回值,因此 Runnable 通常用于不需要返回结果的场景。

使用 Runnable 的示例:

Callable 接口

Callable 是 Java 5 引入的接口,它与 Runnable 类似,但 call() 方法可以返回一个结果,并且可以抛出异常。Callable 通常用于需要返回结果或处理异常的场景。

使用 Callable 的示例:

区别总结

  • 返回值:Runnable 无返回值,Callable 有返回值。
  • 异常处理:Runnable 不能抛出受检异常,Callable 可以抛出受检异常。
  • 使用场景:Runnable 用于不需要返回结果的场景,Callable 用于需要返回结果或处理异常的场景。
  • 线程池支持:Runnable 通过 execute() 提交任务,Callable 通过 submit() 提交任务并返回 Future 对象。