线程池的工作原理

线程池可以减少创建和销毁线程的次数,从而减少系统资源的消耗。当一个任务(Runnable或Callable对象)(Runnable无返回值,Callable有返回值)被提交到线程池时:

一、首先判断核心线程池中的线程是否已经满了,如果没满,则创建一个核心线

程来执行任务,否则进入下一步。

二、判断工作队列是否已满,没有满则加入工作队列,否则执行下一步。

三、判断线程数是否达到了最大值,如果不是,则创建非核心线程执行任务,否

则执行饱和策略(需要实现接口RejectedExecutionHandler。默认为ThreadPoolExecutor.AbortPolicy策略,会抛出RejectedExecutionException异常)。

1.内置的饱和策略:

1).ThreadPoolExecutor.AbortPolicy:拒绝执行任务。

2).ThreadPoolExecutor.CallerRunsPolicy:由调用者线程执行该任务。

3).ThreadPoolExecutor.DiscardPolicy:丢弃任务。

4).ThreadPoolExecutor.DiscardOldestPolicy:丢弃最旧的任务并尝试重新提交新任务。

2.也可以自定义RejectedExecutionHandler接口来满足实际需求。

四、引申

1.线程池中的线程数超过核心线程数时,多余的线程会在空闲一段时间(超过某个阈值keepAliveTime)后被销毁,以减少资源消耗。

2.核心线程即使处于空闲状态也不会被销毁。

3.可以通过shutdown()方法来关闭线程池:此方式会等待线程池中的所有任务都执行完成后再关闭线程池。

4.可以通过shutdownNow()方法来关闭 线程池:此方式会尝试停止正在执行的任务后关闭线程池。

5.关闭线程池时会停止接受新任务。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

相关推荐
拾忆,想起2 分钟前
TCP滑动窗口:网络世界的“智能流量阀门”
java·网络·数据库·网络协议·tcp/ip·php·哈希算法
小龙报7 分钟前
算法通关指南:数据结构和算法篇 --- 队列相关算法题》--- 1. 【模板】队列,2. 机器翻译
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
摇滚侠7 分钟前
Spring Boot3零基础教程,Reactive-Stream 发布订阅写法,笔记104 笔记105
java·spring boot·笔记
木木em哈哈13 分钟前
有关于cnb自动化的脚本补全
服务器·开发语言·pygame
星释15 分钟前
Rust 练习册 :Poker与扑克牌游戏
开发语言·游戏·rust
晨非辰23 分钟前
【数据结构初阶】--从排序算法原理分析到代码实现操作,参透插入排序的奥秘!
c语言·开发语言·数据结构·c++·算法·面试·排序算法
Jonathan Star28 分钟前
Next.js、NestJS、Nuxt.js 是 **Node.js 生态中针对不同场景的框架**
开发语言·javascript·node.js
laplace01232 小时前
Java八股—MySQL
java·mysql·oracle
zhangyao9403303 小时前
关于js导入Excel时,Excel的(年/月/日)日期是五位数字的问题。以及对Excel日期存在的错误的分析和处理。
开发语言·javascript·excel
熙客3 小时前
TiDB:分布式关系型数据库
java·数据库·分布式·tidb