线程池如何用、线程池的好处、线程池的启动策略
大家好,我是王工,干了7年Java后端开发,面试中线程池几乎是必考题。今天咱们就围绕线程池如何用、线程池的好处以及线程池的启动策略这三点,用大白话讲清楚面试官最想听的答案!
📁 2025年Java面试宝典已整理好(含并发、JVM、分布式等高频考点):
🔹 链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
🔹 提取码: 9b3g
一、线程池如何用
线程池可不是随便new Thread()就完事了!核心是ThreadPoolExecutor的7大参数:
- 核心线程数:常驻的“骨干员工”
- 最大线程数:忙不过来时招的“临时工”
- 存活时间:临时工多久没活干就辞退
- 时间单位:分钟还是秒?
- 任务队列:活太多排个队(常用
LinkedBlockingQueue) - 线程工厂:给线程取个名方便甩锅(划掉)排查
- 拒绝策略:队伍爆满咋办?甩活 or 抛异常?

举个栗子:
ExecutorService pool = new ThreadPoolExecutor(
5, // 核心5人
10, // 最多10人
60, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100), // 排100个任务
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy() // 满了直接报错
);
二、线程池的好处
为啥要用线程池?好处可太实在了:
- 省资源:线程复用,不用反复开机关机(创建/销毁线程耗CPU)
- 控并发:限制最大线程数,防止系统被请求冲垮
- 管理易:统一监控任务状态,还能定时执行
- 响应快:任务来了直接扔给现成线程,不用等创建
想象一下:双11每秒10万请求,如果每个请求开1个线程,服务器直接炸成烟花🎇!而用线程池,就像安排100个窗口处理排队人流,稳稳当当。
💡 小贴士:想系统刷透Java并发面试题?可去面试鸭返利网买会员,用我的专属链接返利25元,相当于打折囤干货!
三、线程池的启动策略
重点来了!线程池怎么分配任务的?记住这个流程图:

- 活来了:先看核心线程有空没?有就立刻干
- 核心忙:任务进队列等着(队满触发下一步)
- 队列满:招临时工(不超过最大线程数)
- 全满员:触发拒绝策略,常见4种:
AbortPolicy:直接抛异常(默认)CallerRunsPolicy:让提交任务的线程自己干DiscardPolicy:偷偷扔掉任务DiscardOldestPolicy:把最老的任务扔了接新的
举个面试场景
面试官:”如果核心线程5个,队列100,最大线程10,突然来150个任务会怎样?“
✅ 标准答:
- 前5个任务:核心线程直接执行
- 接下来100个:进队列排队
- 第106-110个:招5个临时线程执行
- 剩下40个:触发拒绝策略(比如抛
RejectedExecutionException)

最后说两句
线程池用得好,系统稳如老狗;用不好,直接OOM送走。关键就是根据业务特点调整参数:
- CPU密集型:线程数 ≈ CPU核数+1
- IO密集型:线程数 ≈ CPU核数 * 2
技术进阶路上少不了好资源加持,需要面试鸭会员的同学,通过面试鸭返利网找我下单,返25元直接抵扣,省到就是赚到 👇
(注:本文技术要点已整理进开头的Java面试宝典,建议下载备用!)


