关注
Java实现多线程的常见方法
1. 继承 Thread 类
- 方式:创建子类继承 Thread 类,重写 run() 方法定义线程任务。
- 特点:
- 简单直接,可直接通过 start() 启动线程。
- 局限性:Java 单继承机制限制,子类无法再继承其他类。
2. 实现 Runnable 接口
- 方式:创建类实现 Runnable 接口,实现 run() 方法,将实例传入 Thread 构造器启动。
- 特点:
- 避免单继承限制,更灵活(可同时继承其他类或实现其他接口)。
- 适合多个线程共享同一任务逻辑(如资源同步场景)。
3. 实现 Callable 接口(JDK 1.5+)
- 方式:创建类实现 Callable<V> 接口,实现 call() 方法(可抛异常、带返回值),通过 FutureTask 包装后提交给线程执行。
- 特点:
- 支持返回值和异常处理,比 Runnable 功能更强大。
- 需配合 Future 或 ExecutorService 获取结果或管理线程。
4. 使用线程池(如 ExecutorService )
- 方式:通过 Executors 工具类创建线程池(如 FixedThreadPool / CachedThreadPool ),调用 execute() 或 submit() 提交任务( Runnable / Callable )。
- 特点:
- 重用线程,减少创建/销毁开销,提升性能。
- 统一管理线程生命周期,控制并发数量,避免资源耗尽。
- 适合大规模或重复执行的多线程任务。
核心区别
- Thread vs Runnable / Callable :前者是线程本身,后者是任务逻辑(分离“线程”与“任务”,更符合面向对象设计)。
- Runnable vs Callable :后者支持返回值和异常处理,适合需要结果的场景。
- 线程池优势:相比手动创建线程,线程池更高效、易维护,是实际开发中的首选方案。
查看原帖
1 评论
相关推荐
客户端已经崩盘:别坑人了
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 27届学院二本,袋鼠云->快手->腾讯wxg,25年末聊聊我的前端之路2.1W
- 2... 适可而止吧!你就是“烂泥”5940
- 3... 岁末论道:谁才是牛客 2025 最强修仙者?5841
- 4... 大四双非水产专业上岸阿里后端(五)5742
- 5... 本科五段大厂实习,秋招五个offer,我的校招结束了5731
- 6... 我的世界观,就是对抗优绩主义的武器3190
- 7... 27双非杀入字节!2734
- 8... 实习被“放养”零产出,该及时止损还是继续苟着?1511
- 9... 26届双非硕Java秋招总结1435
- 10... 如果2025的我是强化学习,那最终奖励会是什么?1435
正在热议
更多
# 实习没人带,苟住还是跑路? #
1887次浏览 61人参与
# 工作中的卑微时刻 #
29764次浏览 186人参与
# 元旦假期你打算怎么过 #
2587次浏览 83人参与
# 过年期间可能会经历的尴尬瞬间 #
48499次浏览 311人参与
# 我们是不是被“优绩主义”绑架了? #
4147次浏览 169人参与
# 从夯到拉,评价编程语言 #
27775次浏览 148人参与
# 如何看待应届生身份? #
210725次浏览 2233人参与
# 查收我的offer竞争力报告 #
263759次浏览 1644人参与
# 多益网络工作体验 #
60136次浏览 299人参与
# 牛客2025仙途报告 #
20566次浏览 321人参与
# 机械制造面试记录 #
299815次浏览 3143人参与
# 实习心态崩了 #
96533次浏览 494人参与
# 华为工作体验 #
277165次浏览 1355人参与
# 26届秋招投递记录 #
109281次浏览 652人参与
# 实习打杂,要跑路吗 #
54300次浏览 330人参与
# 你有哪些缓解焦虑的方法? #
44762次浏览 873人参与
# 找工作,行业重要还是岗位重要? #
88224次浏览 1769人参与
# 华为池子有多大 #
154549次浏览 867人参与
# 今年你最想重开的一场面试是? #
17531次浏览 173人参与
# 参加过提前批的机械人,你们还参加秋招么 #
105298次浏览 1647人参与
查看21道真题和解析