Java-技术专区-如何监控Java线程池的状态
2024-08-30 10:41:32
线程池介绍
什么是线程池、线程池核心类、线程池工作流程、线程池分类、拒绝策略、及如何提交与关闭线程池等。
但在实际开发过程中,在线程池使用过程中可能会遇到各方面的故障,如线程池阻塞,无法提交新任务等。
如果你想监控某一个线程池的执行状态,线程池执行类
ThreadPoolExecutor
也给出了相关的 API, 能实时获取线程池的当前活动线程数、正在排队中的线程数、已经执行完成的线程数、总线程数等。
总线程数 = 排队线程数 + 活动线程数 + 执行完成的线程数。
下面给出一个线程池使用示例,及教你获取线程池状态。
private static ExecutorService es = new ThreadPoolExecutor(50, 100, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(100000));
public static void main(String[] args) throws Exception {
for (int i = 0; i < 100000; i++) {
es.execute(() -> {
System.out.print(1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
ThreadPoolExecutor tpe = ((ThreadPoolExecutor) es);
while (true) {
System.out.println();
int queueSize = tpe.getQueue().size();
System.out.println("当前排队线程数:" + queueSize);
int activeCount = tpe.getActiveCount();
System.out.println("当前活动线程数:" + activeCount);
long completedTaskCount = tpe.getCompletedTaskCount();
System.out.println("执行完成线程数:" + completedTaskCount);
long taskCount = tpe.getTaskCount();
System.out.println("总线程数:" + taskCount);
Thread.sleep(3000);
}
}
线程池提交了 100000 个任务,但同时只有 50 个线程在执行工作,我们每陋 3 秒来获取当前线程池的运行状态。
第一次程序输出:
当前排队线程数:99950
当前活动线程数:50
执行完成线程数:0
总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000
第二次程序输出:
当前排队线程数:99800
当前活动线程数:50
执行完成线程数:150
总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000
活动线程数和总线程数是不变的,排队中的线程数和执行完成的线程数不断在变化,直到所有任务执行完毕,最后输出:
这样,你了解了这些 API 的使用方法,你想监控线程池的状态就非常方便了。
最新文章
- 靠谱的datatable转json方法
- python第一天
- CentOS6.8下部署Zabbix3.0
- Hadoop 文件的数量怎么比block的数量多?
- 第十二届浙江省大学生程序设计大赛-Lunch Time 分类: 比赛 2015-06-26 14:30 5人阅读 评论(0) 收藏
- Android中如何取消调转界面后EditText默认获取聚焦问题
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-008-带参数的ADVICE
- Python 学习之urllib模块---用于发送网络请求,获取数据
- Matlab与DSP联合开发
- 【内部竞聘】华东/华南 -区域招商高级经理/经理 - 荐才纳贤 - 京东内部论坛 - Powered by Discuz!
- ASP.NET WEB API 如何使用基于Post的方式传递多个值(二)
- hdu4300之KMP&;&;EKMP
- Self Hosting WebServer 的几种方式
- js导出excel文件
- SQL*Plus工具
- uCrop图片裁剪
- Python 多线程、多进程 (一)之 源码执行流程、GIL
- BZOJ.2938.[POI2000]病毒(AC自动机)
- 根据twitter的snowflake算法生成唯一ID
- JavaWeb 返回json数据的两种方式
热门文章
- C语言如何打印出%
- 从0构建webpack开发环境(三) 开发环境以及 webpack-dev-server 的使用
- RabbitMQ ——与Spring集成及exchange的direct、topic方式实现和简单队列实现
- Failed to load C:\ProgramFilesTwo\Android\sdk\build-tools\27.0.3\lib\dx.jar
- CentOS7.6系统安装zabbix3.4.8客户端
- ERROR- 开发常见error
- Oracle数据库同义词
- Java虚拟机(JVM)与垃圾回收机制(GC)的详解
- count(1)、count(*)、count(字段)的区别
- 51nod 1714:B君的游戏(博弈 sg打表)