Java创建线程有几种方式 Java多线程创建方法【总结】

Java创建线程有4种方式:1.继承Thread类;2.实现Runnable接口;3.实现Callable接口配合Future获取结果;4.使用Executor框架的线程池。前两种适合基础场景,后两种更适用于工程实践,选择取决于是否需返回值、线程复用及资源管控需求。

Java 创建线程主要有 4 种方式,本质都是基于 Thread 类或其执行机制,但封装层级和使用场景不同。掌握它们的区别,能帮你写出更清晰、可维护、符合规范的多线程代码。

1. 继承 Thread 类

最直观的方式:自定义类继承 Thread,重写 run() 方法,然后调用 start() 启动。

  • 优点:简单直接,适合初学理解线程本质
  • 缺点:Java 不支持多重继承,一旦继承了 Thread,就无法再继承其他类
  • 注意:必须调用 start(),不是 run();直接调用 run() 只是普通方法执行,不会开启新线程

2. 实现 Runnable 接口

更推荐的方式:定义类实现 Runnable 接口,重写 run(),再将其实例传给 Thread 构造器。

  • 优点:避免单继承限制,天然支持“任务”与“执行者”分离,利于复用和解耦
  • 适用场景:大多数普通异步任务,尤其配合线程池使用(ExecutorService.submit(Runnable)
  • 示例:new Thread(new MyTask()).start();

3. 实现 Callable 接口 + Future

适用于需要**返回结果**或**抛出异常**的任务。它比 Runnable 更强大,但需配合 Future 获取结果。

  • Callable.call() 返回泛型结果,且可抛出受检异常
  • 通常不直接用于 Thread,而是提交给线程池:ExecutorService.submit(Callable),返回 Future
  • 可通过 future.get() 阻塞获取结果,或用 isDone()/cancel() 控制生命周期

4. 使用线程池(Executor 框架)

生产环境的主流方式:通过 Executors 工具类或 ThreadPoolExecutor 创建线程池,统一管理线程生命周期。

  • 优势:避免频繁创建/销毁线程开销,控制并发数,提升性能和稳定性
  • 常用类型:newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutornewScheduledThreadPool
  • 提交任务:支持 RunnableCallable,返回 Future 或无返回值
  • 最佳实践:优先使用 ThreadPoolExecutor 显式构造,避免 Executors 的潜在风险(如无界队列导致 OOM)

基本上就这些。前两种偏基础,后两种更贴近工程实践。选择哪种,关键看是否需要返回值、是否要复用线程、以及项目对资源管控的要求。