Java 线程创建方式深度剖析(Runnable、Callable、Future)

1. 为什么不推荐继承 Thread? public class MyThread extends Thread {} 问题: 单继承限制 任务与线程强耦合 不利于线程池 2. Runnable:最基础也是最常用

1. 为什么不推荐继承 Thread?

public class MyThread extends Thread {}

问题:

  • 单继承限制

  • 任务与线程强耦合

  • 不利于线程池

2. Runnable:最基础也是最常用

Runnable task = () -> {
    System.out.println("执行任务");
};
new Thread(task).start();

特点:

  • 无返回值

  • 无异常抛出

  • 适合简单任务

3. Callable:有返回值的任务

Callable<Integer> task = () -> {
    return 100;
};

配合 Future 使用:

FutureTask<Integer> futureTask = new FutureTask<>(task);
new Thread(futureTask).start();
Integer result = futureTask.get();

4. Runnable vs Callable 对比

特性

Runnable

Callable

返回值

抛异常

常用场景

简单任务

复杂任务

5. 本质理解(重要)

线程 = 执行容器
Runnable / Callable = 任务

这是 Java 并发设计的核心思想。

Java 多线程核心原理全解析(线程、进程、上下文切换) 2026-02-05
Java 内存模型 JMM 深度解析(可见性、有序性、原子性) 2026-02-05

评论区