线程池大概是面试八股文出现频率最高的知识点,但大部分人对它的理解停在“背参数”这一层。
corePoolSize 的真正含义
核心线程数不是“常驻线程数”,而是“不需要排队就创建的线程数”。这个差别在读源码之前我一直没搞清楚。
队列比你想的重要
newFixedThreadPool 用的是无界队列 LinkedBlockingQueue,这意味着maximumPoolSize 在那里形同虚设——任务永远先堆队列,堆不进去才开新线程,而无界队列永远堆得进去。
所以线上事故里“线程池没扛住”的真相,常常是队列无限膨胀导致 OOM,而不是线程不够。
(本系列第二篇讲 volatile 与内存可见性,写作中。)