为什么核心线程池满了后 不直接创建新的线程去执行新任务?

导读:本篇文章讲解 为什么核心线程池满了后 不直接创建新的线程去执行新任务?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

为什么核心线程池满了后 不直接创建新的线程去执行新任务?


 

线程池的执行流程:

为什么核心线程池满了后 不直接创建新的线程去执行新任务?

为什么核心线程池满了后 不直接创建新的线程去执行新任务?

而是先交给任务队列呢?

《并发编程的艺术》中的解答是:

ThreadPoolExecutor
采取上述步




设计
思路,是

了在


execute()
方法


尽可能
地避免获取全局锁
(那将会是一个

重的可伸



)。在
ThreadPoolExecutor
完成
预热
之后
(当前运行的
线
程数大于等于
corePoolSize
),几乎所有的
execute()
方法

用都是

行步

2
也就是放入队列,而步

2
不需要

取全局
锁。
为什么核心线程池满了后 不直接创建新的线程去执行新任务?

 

因为如果核心线程满了就创建新的线程去执行,达到最大线程数之后再放入队列,那么新创建线程就需要获取全局锁,对性能有很大的损耗。

而且如果正在被核心线程执行的任务很快的执行完,就可以直接从任务队列中取出新的任务执行。

这样不需要创建新的线程也可以完成任务,那么这样还可以节省一部分内存。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92811.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!