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 获取结果。
千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使
立即学习“Java免费学习笔记(深入)”;
-
Callable.call()返回泛型结果,且可抛出受检异常 - 通常不直接用于
Thread,而是提交给线程池:ExecutorService.submit(Callable),返回Future - 可通过
future.get()阻塞获取结果,或用isDone()/cancel()控制生命周期
4. 使用线程池(Executor 框架)
生产环境的主流方式:通过 Executors 工具类或 ThreadPoolExecutor 创建线程池,统一管理线程生命周期。
- 优势:避免频繁创建/销毁线程开销,控制并发数,提升性能和稳定性
- 常用类型:
newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor、newScheduledThreadPool - 提交任务:支持
Runnable和Callable,返回Future或无返回值 - 最佳实践:优先使用
ThreadPoolExecutor显式构造,避免Executors的潜在风险(如无界队列导致 OOM)
基本上就这些。前两种偏基础,后两种更贴近工程实践。选择哪种,关键看是否需要返回值、是否要复用线程、以及项目对资源管控的要求。









