之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、线程池核心类、线程池工作流程、线程池分类、拒绝策略、及如何提交与关闭线程池等。

但在实际开发过程中,在线程池使用过程中可能会遇到各方面的故障,如线程池阻塞,无法提交新任务等。

如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动线程数、正在排队中的线程数、已经执行完成的线程数、总线程数等。总线程数 = 排队线程数 + 活动线程数 + 执行完成的线程数。

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

private static ExecutorService es = new ThreadPoolExecutor(50, 100, 0L, TimeUnit.MILLISECONDS,

new LinkedBlockingQueue(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

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

当前排队线程数:0

当前活动线程数:0

执行完成线程数:100000

总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000

这样,你了解了这些 API 的使用方法,你想监控线程池的状态就非常方便了。

更多Java多线程教程请关注Java技术栈微信公众号,在公众号后台回复关键字:多线程,以下仅为部分预览。出场率比较高的一道多线程安全面试题

sleep( ) 和 wait( ) 的这 5 个区别

Java多线程神器:join使用及原理

面试常考:Synchronized 有几种用法?

任务并行神器:Fork & Join 框架详解

本文原创首发于微信公众号:Java技术栈(id:javastack),转载请原样保留本信息。

java 线程状态监控_干货:教你如何监控 Java 线程池运行状态相关推荐

  1. java 弱引用定位_手把手教你定位常见Java性能问题

    概述 性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙 ...

  2. 如何查找历史线程阻塞原因_吊打面试官!Java多线程并发 108 道题,你能答对多少?...

    多线程并发108题 1.Java中实现多线程有几种方法 2.继承Thread 类 3.实现Runnable 接口. 4.ExecutorService. Callable. Future 有返回值线程 ...

  3. java 文本工具类_干货:排名前16的Java工具类

    原标题:干货:排名前16的Java工具类 作者丨Java技术栈 https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Ja ...

  4. java编写爬虫_手把手教你从零开始用Java写爬虫

    本文将手把手地教大家从零开始用Java写一个简单地爬虫! 目标 爬取全景网图片,并下载到本地 收获 通过本文,你将复习到:IDEA创建工程 IDEA导入jar包 爬虫的基本原理 Jsoup的基本使用 ...

  5. java有关的论述_中国大学MOOC: 以下有关JAVA线程的论述,正确的是()。

    中国大学MOOC: 以下有关JAVA线程的论述,正确的是(). 答:Java 线程由JAVA虚拟机JVM管理 Java 线程创建有两种方法:1)扩展java.lang.Thread类:2)实现Runn ...

  6. equals null报错吗_轻轻松松教你搞定Java中的==和equals

    前言 相信很多读者关于==和equals懂了又懵,懵了又懂,如此循环,事实上可能是因为看到的博客文章之类的太多了,长篇大论,加上一段时间的洗礼之后就迷路了.本篇文章再一次理清楚.当然如果觉得本文太啰嗦 ...

  7. java 线程的构造函数_[c++11]多线程编程(二)——理解线程类的构造函数

    构造函数的参数 std::thread类的构造函数是使用可变参数模板实现的,也就是说,可以传递任意个参数,第一个参数是线程的入口函数,而后面的若干个参数是该函数的参数. 第一参数的类型并不是c语言中的 ...

  8. 为什么重新new两个线程线程号相同_面试官每次问我关于线程间通信方法,我都回答的很糟糕...

    线程的生命周期 废话不多写.首先我们先回顾回顾,理解下线程的生命周期,以及不同的阶段的区别: 新建状态(NEW) 当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配 ...

  9. java spring框架 注解_史上最全的java spring注解

    史上最全的java spring注解,没有之一 注解是个好东西,但好东西我们也是看见过,整理过,理解过,用过才知道好.不求我们每个都记住,但求保有印象,在需要的时候能提取出来再查找相关资料,平时工作就 ...

  10. tomcat线程释放时间_详解tomcat的连接数与线程池

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server.xm ...

最新文章

  1. 用命令行管理你的GitHub项目,不必再开网页,官方CLI工具1.0版今日上线
  2. Django框架 day02
  3. 全库检索包含某个值的表名和所在的列.
  4. js实现搜索框智能提示上下移动效果
  5. 厉害了,用python爬取自己的微信朋友
  6. numpy—np.info(function)
  7. 百度知道,每天电影资源轻松引流赚钱小项目!
  8. Eclipse 中Alt+/快捷键失效的解决办法。
  9. Python—字典的操作
  10. 利用Visual C++ 实现QQ消息群发 ,大神实际测试,已成功发送消息
  11. 信息安全技术——(九)基于MATLAB数字水印系统设计
  12. 为什么社区团购模式那么受欢迎和追捧
  13. ESP-MESH 无线组网,让智能家居通信更方便 | ESP32轻松学(Arduino版)
  14. mysql secure file_mysql load data secure-file-priv问题
  15. 007-aven-assembly-plugin和maven-jar-plugin打包,java启动命令
  16. CSLA公链以“硬实力”成业界翘楚—csla超级公链是真的吗
  17. Q版京剧脸谱来喽——花旦
  18. HTML/CSS 新浪注册框
  19. window各版本回顾
  20. CVPR 2022 | 刷新low-level视觉多项第一!Restormer:图像复原又一力作!

热门文章

  1. 装机清单、配置及使用技巧
  2. 四步搞定64位win7安装CAD2008
  3. PIE-engine 教程 ——利用NDWI加载青海湖三年水域影像和面积计算
  4. 1.如何让另一台电脑访问本机发布的web项目
  5. [乐意黎转载]高效 jquery 的奥秘
  6. C# 取出字符串中的一个字符
  7. 西安电子科技大学电磁场实验四仿真结果展示
  8. footprints 大全
  9. sketchup作品_sketchup作品
  10. C++ Json库ArduinoJson介绍及使用说明