博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 线程池定时监控
阅读量:4220 次
发布时间:2019-05-26

本文共 2370 字,大约阅读时间需要 7 分钟。

在上一篇Spring异步线程池:
,该文介绍了如何使用Spring的注解来配置异步线程操作。
本篇博文中,补充介绍如何通过Spring定时任务来配置定时检测线程池的使用情况。
ThreadPoolExecutor线程池提供了如下几个方法:
getTaskCount():线程池已执行和未执行的任务总数
getCompletedTaskCount():已完成的任务数量
getPoolSize():线程池当前的线程数量
getActiveCount():当前线程池中正在执行任务的线程数量
getQueue().size():获取队列中的任务数
(1)写一个存储线程池的静态字段相关的类:
public abstract class ThreadPoolInfoUtil {       public static ConcurrentHashMap
threadPoolMap = new ConcurrentHashMap<>();}
(2)在创建每个线程池时,把线程池实例传入上述的静态字段
@EnableAsync@Configurationpublic class PayThreadPoolConfig {        @Value("${pay.threadNamePrefix}")    private String threadNamePrefix;        @Value("${pay.maxPoolSize}")    private Integer maxPoolSize;        @Value("${pay.corePoolSize}")    private Integer corePoolSize;        @Value("${pay.queueCapacity}")    private Integer queueCapacity;    @Bean(value = "paymentTaskExexutor")    public AsyncTaskExecutor paymentTaskExexutor() {        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();        executor.setThreadNamePrefix(threadNamePrefix);        executor.setCorePoolSize(corePoolSize);        executor.setMaxPoolSize(maxPoolSize);        executor.setQueueCapacity(queueCapacity);        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());        executor.initialize();        ThreadPoolInfoUtil.threadPoolMap.put("paymentTaskExexutor", executor);        return executor;    }}
(3)每隔1分钟打印一次线程池相关的信息
Slf4j@Component@EnableSchedulingpublic class ScheduleService {        @Scheduled(fixedRate = 60000)  // 每隔一分钟打印一次    public void scheduledFixedRate() {        ThreadPoolTaskExecutor paymentTaskExexutor = ThreadPoolInfoUtil.threadPoolMap.get("paymentTaskExexutor");        ThreadPoolExecutor threadPoolExecutor = paymentTaskExexutor.getThreadPoolExecutor();        String threadNamePrefix = paymentTaskExexutor.getThreadNamePrefix();        long taskCount = threadPoolExecutor.getTaskCount();        long poolSize = threadPoolExecutor.getPoolSize();        long completedTaskCount = threadPoolExecutor.getCompletedTaskCount();        long activeCount = threadPoolExecutor.getActiveCount();        long queueSize = threadPoolExecutor.getQueue().size();        log.info("threadNamePrefix=>{}, taskCount=>{}, completedTaskCount=>{}, activeCount=>{}, queueSize=>{}",                 threadNamePrefix, taskCount, completedTaskCount, activeCount, queueSize);    }}

转载地址:http://ggomi.baihongyu.com/

你可能感兴趣的文章
idea快捷键使用
查看>>
2.1MAC协议概述
查看>>
2.3 WSN的MAC协议
查看>>
图解后缀表达式的计算过程
查看>>
栈与队列的应用——计算表达式的值
查看>>
静态链表——sharing
查看>>
静态链表——sorting
查看>>
DFS——背包问题
查看>>
DFS——选数问题
查看>>
BFS——求矩阵中“块”的个数
查看>>
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
Web前端学习笔记——JavaScript之事件详解
查看>>
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>