Post
Tomcat 线程池的扩容与排队策略
Tomcat 线程池并不只是简单排队,它通过 TaskQueue 改写了行为,整体上更偏向先扩 worker 再排队。
很多人讲 Tomcat 线程池时,会直接把它等同于一个普通的 ThreadPoolExecutor,但这个理解其实不够准确。
Tomcat 真正用来处理这类场景的,是 StandardThreadExecutor。更关键的是,它还通过自定义的 TaskQueue 对默认线程池行为做了一层包装。
这个包装带来的核心效果是:它并不是一上来就把任务往等待队列里塞,而是会优先尝试继续增加 worker 线程,直到接近上限之后,才开始更明显地依赖队列。
这种策略对 Web 场景其实很自然。因为请求流量通常有明显突发性,如果太早进入排队,响应延迟会更容易被放大;而先扩 worker,至少能让系统在短时波峰里多吃下一些并发。
当然,这也不是没有代价。线程涨得更激进,意味着上下文切换和资源占用也会更敏感。所以关键不是简单说“Tomcat 用了线程池”,而是要看它到底把“扩线程”和“排队”这两个动作放在什么优先级上。