通过 nacos 可以动态修改线程池的参数,且实时生效。
通过提供http接口,来返回当前线程池的各项指标。
内部包装了JDK的ThreadPoolExecutor , 线程池功能都是原生的。
集成简单,只需引入一个starter, 然后配置nacos地址即可。
nacos上配置线程池参数:
启动程序,查看监控(通过提供http接口方式):
activeCount : 正在工作的线程数,当前0,因为我们还没提交任务。
corePoolSize: 核心线程数为5,因为我们nacos配置就是5。
maximumPoolSize: 最大线程5, 我们nacos配置就是5。
queueUsedSize : 队列里面挂起的任务数,目前为0。
我们向队列中提交6次任务, 任务里面是无限循环,在查看监控:
我们发现 activeCount 为 5 , 也就是说 有5个线程在工作了。
queueUsedSize 为1, 因为我们提交了6个任务,所以一个任务由于没有可用线程了,导致挂到队列里面。
修改nacos配置:
此时,我们的程序已经执行了第6个任务了,再次查看监控:
activeCount 变成了6 , queueUsedSize 变成了0 , 说明我们挂起的任务被自动执行了。
项目中引入maven:
com.h.threadpool
h-threadpool-boot-starter
0.0.1-SNAPSHOT
application.properties配置:
# 指定线程池的名称
hthreadpool.nam = 订单服务线程池
# 指定nacos配置地址
hthreadpool.config_host = 121.4.189.227:8848
# 指定nacos dataId
hthreadpool.config_dataId = uc-order.yml
# 指定 nacos group
hthreadpool.config_groupId = DEFAULT_GROUP
提交任务:
@RestController
public class OrderController {
@Autowired
HThreadPoolExecutor threadPoolExecutor;
@GetMapping("/set")
public void set() {
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
System.out.println("任务提交成功");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
当启动你的微服后,会在当前机器上开启一个http端口,用来获取当前线程池的指标数据, 路径如下:
监控格式数据:
{
"activeCount":6,
"activeUsedPercent":"100%",
"corePoolSize":6,
"maximumPoolSize":6,
"queueRemainSize":1024,
"queueTotalSize":1024,
"queueUsedPercent":"0%",
"queueUsedSize":0,
"rejectedClass":"java.util.concurrent.ThreadPoolExecutor$AbortPolicy",
"taskCompletedSize":0
}
字段解释:
public class ThreadPoolNature {
/***
* 队列总大小
*/
private int queueTotalSize;
/***
* 队列已经使用大小
*/
private int queueUsedSize;
/***
* 队列剩余大小
*/
private int queueRemainSize;
/**
* 隊列使用 百分比
*/
private String queueUsedPercent;
/***
* 任务完成的数量
*/
private long taskCompletedSize;
/***
* 活动线程数
*/
private int activeCount;
/***
* 最大线程数
*/
private int maximumPoolSize;
/***
* 核心线程数
*/
private int corePoolSize;
/**
* 线程使用百分比 (活动线程/最大线程数)
*/
private String activeUsedPercent;
/***
* 拒绝策略类
*/
private String rejectedClass;
}
可修改的配置指标有:
# 核心线程数
hthreadpool.corePoolSize: 6
# 最大线程数
hthreadpool.maximumPoolSize: 6
# 保活时间,单位毫秒
hthreadpool.keepAliveTime: 100
# 队列大小
hthreadpool.queueSize: 10
# 拒绝策略
hthreadpool.rejectedExecutionHandler: java.util.concurrent.ThreadPoolExecutor.AbortPolicy
分为三大核心:
配置中心
监控中心
线程池中心
源码我就不解析了,要代码的可以加我,qq:657455400 , wx:hadluo