7-ysyThread-线程池参数的并发安全刷新
线程池参数的并发安全刷新动态线程池的核心能力之一,就是运行时可以自动感知配置变化并热更新,无需重启服务 配置前置验证1. 判断是否有线程池配置首先检查远程配置是否包含线程池设置,如果为空,则直接返回,跳过后续处理 2. 判断线程池配置是否发生变化我们逐个遍历线程池 ID,加synchronized锁进行对比,根据线程池 ID 获取 注册中心 中的线程池实例,对比新旧配置 ps:参数中的阻塞队列,除了要校验容量,还要校验类型 线程池配置变更如果检测到变化,调用线程池刷新方法应用新的配置: 1. 核心 / 最大线程数线程数更新的原则是:先最大后核心,如果新核心线程数大于当前最大线程数,必须先调大 maximumPoolSize,否则 JDK 会抛 IllegalArgumentException。之所以会抛出异常,是因为 JDK17 线程池底层在设置核心线程数时做了 参数限制校验 1234567if ( 远程核心 > 本地最大 ) { executor.setMaximumPoolSize( 远程最大 ); ...
6-ysyThread-通过 Nacos 实现参数配置(模板方法)
通过 Nacos 实现参数配置(模板方法)1234567891011121314.├── core # 动态线程池核心模块包,实现动态线程池相关基础类定义├── dashboard-dev # 前端页面方便查看和调试├── example # 动态线程池示例包,演示线程池动态参数变更、监控和告警等功能│ ├── apollo-example│ └── nacos-cloud-example├── spring-base # 动态线程池基础模块包,包含Spring扫描动态线程池、是否启用以及Banner打印等└── starter # 动态线程池配置中心组件包,实现线程池结合Spring框架和配置中心动态刷新 ├── adapter # 动态线程池适配层,比如对接 Web 容器 Tomcat 线程池等 │ └── web-spring-boot-starter # Web 容器线程池组件库 ├── apollo-spring-boot-starter # Apollo 配置中心动态监控线程池组件库 ├──...
5-ysyThread-starter 模块设计-02
starter 模块设计-021234567891011121314.├── core # 动态线程池核心模块包,实现动态线程池相关基础类定义├── dashboard-dev # 前端页面方便查看和调试├── example # 动态线程池示例包,演示线程池动态参数变更、监控和告警等功能│ ├── apollo-example│ └── nacos-cloud-example├── spring-base # 动态线程池基础模块包,包含Spring扫描动态线程池、是否启用以及Banner打印等└── starter # 动态线程池配置中心组件包,实现线程池结合Spring框架和配置中心动态刷新 ├── adapter # 动态线程池适配层,比如对接 Web 容器 Tomcat 线程池等 │ └── web-spring-boot-starter # Web 容器线程池组件库 ├── apollo-spring-boot-starter # Apollo 配置中心动态监控线程池组件库 ├──...
4-ysyThread-starter 模块设计-01
starter 模块设计-011234567891011121314.├── core # 动态线程池核心模块包,实现动态线程池相关基础类定义├── dashboard-dev # 前端页面方便查看和调试├── example # 动态线程池示例包,演示线程池动态参数变更、监控和告警等功能│ ├── apollo-example│ └── nacos-cloud-example├── spring-base # 动态线程池基础模块包,包含Spring扫描动态线程池、是否启用以及Banner打印等└── starter # 动态线程池配置中心组件包,实现线程池结合Spring框架和配置中心动态刷新 ├── adapter # 动态线程池适配层,比如对接 Web 容器 Tomcat 线程池等 │ └── web-spring-boot-starter # Web 容器线程池组件库 ├── apollo-spring-boot-starter # Apollo 配置中心动态监控线程池组件库 ├──...
3-ysyThread-core 模块设计-01
core 模块设计-011234567891011121314.├── core # 动态线程池核心模块包,实现动态线程池相关基础类定义├── dashboard-dev # 前端页面方便查看和调试├── example # 动态线程池示例包,演示线程池动态参数变更、监控和告警等功能│ ├── apollo-example│ └── nacos-cloud-example├── spring-base # 动态线程池基础模块包,包含Spring扫描动态线程池、是否启用以及Banner打印等└── starter # 动态线程池配置中心组件包,实现线程池结合Spring框架和配置中心动态刷新 ├── adapter # 动态线程池适配层,比如对接 Web 容器 Tomcat 线程池等 │ └── web-spring-boot-starter # Web 容器线程池组件库 ├── apollo-spring-boot-starter # Apollo 配置中心动态监控线程池组件库 ├── common-spring-boot-starter #...
2-ysyThread-如何设计动态线程池?
如何设计动态线程池聚焦线程池问题线程池的问题与业务规模无关——只要你用线程池,就势必会遇到这几道问题 线程池随意 new,资源失控 —— 因为 缺乏统一注册表 —— 通过 线程池注册中心 + 统一管控 参数难估算、只能重发 —— 因为 静态配置 & 无监控 —— 通过 运行中热刷新 + 实时指标采集 队列堵塞 / 拒绝策略“黑盒” —— 因为 无告警 & 无追踪—— 通过 三重告警触发器 (活跃度 / 队列 / 拒绝) 下线时任务丢失 —— 因为 线程池生命周期缺口 —— 通过 优雅关闭 Hook 线程池问题解决思路1. 线程池资源管理 —— Nacos 把线程池的声明全部收敛到配置中心:先在配置中心登记,再由应用按需装配 项目统一约定:如需新增线程池,必须先在配置中心完成登记,再由应用自动装配,确保规范一致、可追溯。 2. 线程池参数动态变更 Nacos既是配置中心也是注册中心。只要把线程池参数集中存放在Nacos,Spring...






