8-ysyThread-阻塞队列容量热更新
阻塞队列容量热更新业务说明什么是阻塞队列?在 Java 中它由接口 BlockingQueue 定义,虽然名称看起来抽象,底层实现却十分灵活,可以基于 数组,也可以使用 单向 或 双向链表 等结构 与普通队列相比,阻塞队列多了两项关键能力: 阻塞插入 :当队列已满时,执行 put 的线程会被挂起,直到出现空位 阻塞移除 :当队列为空时,执行 take 的线程同样会被挂起,直到有元素可取 如何实现阻塞队列热更新?1. 阻塞队列不支持更新容量在日常线程池调优过程中,我们可能会遇到一个真实的问题: 队列被塞满了,线程池也跑满了,但我又不能轻易重启服务,只是想把队列容量调大点,临时抗一波压力,有没有办法? 如果使用的是 LinkedBlockingQueue,可能会发现它的容量是固定的,根本不支持动态调整 12/** The capacity bound, or Integer.MAX_VALUE if none */ private final int capacity; 2....
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 #...






