Java如何创建多线程?
- 后端开发
- 2025-06-12
- 6
线程基础概念
线程是轻量级进程,共享同一进程资源,Java通过java.lang.Thread类管理线程生命周期(新建、就绪、运行、阻塞、终止)。

创建线程的三种方式
继承Thread类
class MyThread extends Thread { @Override public void run() { System.out.println("线程执行: " + Thread.currentThread().getName()); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 启动线程(非直接调用run()) } }
特点:
- 简单直接
- 单继承限制,扩展性差
实现Runnable接口(推荐)
class MyRunnable implements Runnable { @Override public void run() { System.out.println("线程执行: " + Thread.currentThread().getName()); } } public class Main { public static void main(String[] args) { Thread thread = new Thread(new MyRunnable()); thread.start(); // Lambda简化(Java 8+) new Thread(() -> System.out.println("Lambda线程")).start(); } }
优势:
- 避免单继承限制
- 任务与线程解耦
- 方便线程池管理
实现Callable接口(带返回值)
import java.util.concurrent.*; class MyCallable implements Callable<String> { @Override public String call() throws Exception { return "结果: " + Thread.currentThread().getName(); } } public class Main { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(new MyCallable()); System.out.println(future.get()); // 获取返回值 executor.shutdown(); } }
适用场景:

- 需要返回结果或抛出异常
- 配合线程池使用
高级方案:线程池(生产环境首选)
通过ExecutorService管理线程资源,避免频繁创建销毁开销。
public class ThreadPoolDemo { public static void main(String[] args) { // 创建固定大小线程池 ExecutorService executor = Executors.newFixedThreadPool(3); // 提交任务 for (int i = 0; i < 5; i++) { executor.execute(() -> { System.out.println("线程池执行: " + Thread.currentThread().getName()); }); } executor.shutdown(); // 关闭线程池 } }
线程池类型:
- newCachedThreadPool():弹性线程池
- newScheduledThreadPool():定时任务
- newWorkStealingPool():并行流优化
关键注意事项
- 线程安全
- 使用synchronized或ReentrantLock解决竞态条件
- 原子类(如AtomicInteger)保证原子操作
- 资源管理
- 务必调用shutdown()关闭线程池
- 避免线程泄漏(如未处理异常的线程)
- 性能考量
- 线程数 = CPU核心数 * (1 + 等待时间/计算时间)
- 避免过度创建线程(推荐上限:CPU核心数+1~2倍)
方案对比
| 方式 | 返回值支持 | 异常处理 | 资源开销 | 扩展性 |
|---|---|---|---|---|
| 继承Thread | 高 | 差 | ||
| 实现Runnable | 中 | 优 | ||
| 实现Callable | 低 | 优 | ||
| 线程池 | 最低 | 最优 |
- 简单任务 → Runnable + Lambda
- 需返回值/异常 → Callable + 线程池
- 高并发场景 → 线程池(ExecutorService)
- 避免直接继承Thread或手动new Thread()
引用说明: 基于Oracle官方文档《Java Concurrency in Practice》及Java 17 API规范,遵循线程安全最佳实践,关键技术点参考自Brian Goetz等著作《Java并发编程实战》(机械工业出版社),代码示例通过IntelliJ IDEA 2025.1编译验证。
