Java线程池提交一个任务,在未达到核心线程数之前,为何不复用之前创建的线程,而是直接新建?

发布于 2022-09-11 23:14:56 字数 48 浏览 30 评论 0

面试官提了个这样的问题,我蒙了。搞不懂这题的考点(知识点)是什么?求助各位大佬。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

撩起发的微风 2022-09-18 23:14:56

@代码宇宙 提到的 预热 是一方面,另外 复用之前创建的线程 本身是有锁开销的,而核心线程数应该是你根据实际情况配置好的一个最优值,在到达这个最优值前尽量避免用锁,有助于提升性能。

鼻尖触碰 2022-09-18 23:14:56

我的理解是这种策略主要是为了预热。也就是即使刚开始还没有很多任务到来,但是我先创建好一批线程,以备不时之需。

霞映澄塘 2022-09-18 23:14:56

我也觉得是类似预热的意思。
线程池在核心线程池内线程数未达到设定最大值时,可以视为这个线程池并未完全初始化完成。这个线程池的设计者应该是考虑过是否需要在线程池被创建出来时就将所有核心线程全部创建出来,但是考虑到如果给定的核心线程数太多,全部初始化的开销太大,程序可能会卡在这一步好久。于是想出了这个解决方案:当核心线程池中线程个数未达到上限时,每当来一个任务时,再去创建一个新线程并且执行这个任务,直到到达上限。此时,线程池才能算是真正初始化完毕。
这样的好处应该是,把创建线程的开销平均到刚开始的每次执行任务中去,这样对系统的性能影响可以降低到最小。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文