项目实践 | 如何监控Java线程池

devtools/2024/9/24 12:44:11/

ThreadPoolExecutor能实时获取线程池的当前活动线程数、正在排队中的任务数、已经执行完成的线程数、总任务数等。

总任务数 = 排队任务数 + 活动线程数 + 执行完成的线程数。

下面给出一个线程池使用示例,及教你获取线程池状态。

java">private static ExecutorService es = new ThreadPoolExecutor(50,100,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());public static void main(String[] args) throws Exception{for (int i = 0; i < 100000; i++) {es.execute(() -> {System.out.println(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);int corePoolSize = tpe.getCorePoolSize();System.out.println("核心线程数:" + corePoolSize);int maximumPoolSize = tpe.getMaximumPoolSize();System.out.println("最大线程数:" + maximumPoolSize);long completedTaskCount = tpe.getCompletedTaskCount();System.out.println("已完成任务数:" + completedTaskCount);long taskCount = tpe.getTaskCount();System.out.println("总任务数:" + taskCount);Thread.sleep(3000);}}

线程池提交了 100000 个任务,但同时只有 50 个线程在执行工作,我们每陋 3 秒来获取当前线程池的运行状态。

第一次程序输出:

第二次程序输出:

第三次程序输出:

活动线程数和总线程数是不变的,排队中的线程数和执行完成的线程数不断在变化,直到所有任务执行完毕

 


http://www.ppmy.cn/devtools/8730.html

相关文章

公网IP地址如何申请SSL证书?有免费的IP ssl吗?

如果用户没有域名或只有公网IP地址或者不方便使用域名&#xff0c;IP地址ssl证书这一特殊的证书可以为IP地址实现HTTPS的安全保护&#xff0c;提高网站数据传输的安全性。 IP地址申请SSL证书的基本步骤 IP ssl证书下载---注册填写230916https://www.joyssl.com/certificate/sel…

C++中,multiple definition of xxx 解决方法

原因分析&#xff1a; 根据错误信息&#xff0c;可能是源文件 a.cpp 和 b.cpp 中都包含了 c.h 头文件&#xff0c;并且在这个头文件中定义了多个函数和变量&#xff0c;导致了多次定义错误。 解决方法&#xff1a; 1&#xff1a;进行头文件保护。 如 #ifndef MY_HEADER_FI…

LeetCode——101——对称二叉树

与LeetCode———100——相同的树类似 目录 1.题目 2.解答 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#…

线性代数---行列式的性质

1. 行列式的行与列(按原顺序)互换

【JAVA面试题】探索多线程同步:ReentrantLock与synchronized的对比解析

程序员如何搞副业&#xff1f; 文章目录 程序员如何搞副业&#xff1f;强烈推荐引言&#xff1a;ReentrantLock介绍可重入性&#xff08;Reentrancy&#xff09;&#xff1a;公平性&#xff08;Fairness&#xff09;&#xff1a;条件变量&#xff08;Condition&#xff09;&…

图片/视频上传(超简单教程)

#应用场景# 该后端开发接口适用 图片/视频上传&#xff0c;返回路径名称场景 1.视频上传 写在Controller层 这里只是一个接收&#xff0c;调用uploadObject方法上传oss public OmsResult<FileUploadDto> goodsUploadVideo(RequestParam(value "file") Mu…

【深度学习实战(16)】语义分割性能评价指标PA,MIoU介绍

一、混淆矩阵 混淆矩阵就是统计分类模型的分类结果&#xff0c;即&#xff1a;统计归对类&#xff0c;归错类的样本的个数&#xff0c;然后把结果放在一个表里展示出来&#xff0c;这个表就是混淆矩阵。 对于二分类问题&#xff0c;将类别1称为正例&#xff08;Positive&#…

前端HTML面试题:meta 元素都有什么

在HTML中&#xff0c;<meta> 元素是一个非常重要且常用的元素&#xff0c;它用于表示关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些元数据不会直接显示在页面上&#xff0c;但可以被浏览器以及其他网页服务利用。在前端开发的面试中&#xff0c…