线程池核心设计思想是复用、节制、缓冲:复用避免频繁创建销毁线程以降低开销;节制通过corePoolSize等五参数硬控资源边界;缓冲借助有界队列平滑流量峰谷,确保系统稳定可控。

线程池的核心设计思想就三点:复用、节制、缓冲。
复用——避免反复创建销毁线程
每个线程背后都对应操作系统内核线程,要分配栈空间(默认约1MB)、注册调度器、做上下文切换。频繁 new Thread() 就像每次点单都临时招个厨师,做完就辞退——招聘成本高、厨房混乱、还容易超编。线程池提前准备好一批“常驻厨师”,任务来了直接派工,做完不走,等着下一道菜。这样省掉了创建/销毁开销,也规避了线程数失控导致的 OOM 或 CPU 过载。
节制——用参数硬性约束资源边界
它不是放任线程数量增长,而是靠五个关键参数协同控流:
- corePoolSize:固定在岗人数,空闲也不撤岗(除非开启超时)
- maximumPoolSize:最多能加多少临时人手,防止无限扩编
- workQueue:任务先排队等位,不立刻增人,避免毛刺冲击
- keepAliveTime:临时工干完活后,等多久没人下单就下班
- handler:真排不上队、也加不了人时,明确怎么拒单(抛异常?丢弃?还是让调用方重试?)
缓冲——用队列平滑流量峰谷
队列是线程池的“减震器”。比如突发请求涌来,核心线程忙不过来,任务先进队列暂存;等线程腾出手,再按顺序取出来执行。这比立刻扩容更稳,也比直接拒绝更友好。但要注意:队列不能无界(如 LinkedBlockingQueue 默认无界),否则任务越积越多,内存迟早撑爆。
立即学习“Java免费学习笔记(深入)”;
本质上,线程池不是为“跑得更快”而生,而是为“扛得更稳”而设——它把不可控的并发压力,转化成可配置、可监控、可兜底的确定性行为。


















