如果把线程池 corePoolSize 设置为 0,会出现什么情况?
我检查了 JDK 8 和 JDK 17 两个主版本源码,这块的处理逻辑也是一样的。从源码可以看到,如果往线程池提交使命的时间,当 corePoolSize = 0 时,代码正常情况下会执行到步骤2。
扩展知识点:这道题可以说是八股文之王了,我工作这么多年,面试过这么多人,也没有见过这道题。
这个逻辑在 JDK 6 之前略有不同,在 JDK 6 之前,当 corePoolSize = 0 的时间,先将这个使命放到壅闭队列中,只有等队列满了才创建线程来执行,而 JDK 6+ 是直接创建一个非核心线程,再放在队列中来执行,很显示,JDK 6 这个优化动作减小了内存溢出的可能性。
光说 JDK 6 和 JDK 8 这两个版本,对线程池的重构就很大,如今主流的版本都是 JDK 8+,这个相识一下就好。
版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。更多文章保举:
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |