Java中可通过ThreadPoolExecutor.getActiveCount()获取当前活跃线程数,即正在执行任务的线程数,不包括空闲线程;需强转为ThreadPoolExecutor类型,结果为近似值。

在 Java 中,可以通过线程池的 getActiveCount() 方法获取当前活跃线程数量。
使用 ThreadPoolExecutor.getActiveCount()
该方法返回**正在执行任务的线程数**(即已从队列中取任务并处于运行状态的线程),不包括空闲等待任务的线程。注意:此方法仅对 ThreadPoolExecutor 及其子类有效(如 Executors.newFixedThreadPool() 返回的就是 ThreadPoolExecutor 实例)。
- 调用前需将线程池强转为
ThreadPoolExecutor类型 - 结果是近似值,因为统计过程无锁,可能随线程状态快速变化而略有延迟
- 示例:
ExecutorService pool = Executors.newFixedThreadPool(5);
// ... 提交一些任务
if (pool instanceof ThreadPoolExecutor) {
int active = ((ThreadPoolExecutor) pool).getActiveCount();
System.out.println("当前活跃线程数:" + active);
}
其他相关指标参考
单看活跃线程数可能不够全面,可结合以下方法综合判断线程池负载:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- getPoolSize():当前线程池中创建的线程总数(包括空闲和活跃)
- getQueue().size():等待执行的任务数量(适用于有界队列)
- getCompletedTaskCount():已完成任务总数(可用于监控吞吐量)
注意事项
不是所有线程池都支持这些方法:
立即学习“Java免费学习笔记(深入)”;
-
Executors.newCachedThreadPool()返回的是ThreadPoolExecutor,可用getActiveCount() -
ForkJoinPool、自定义实现或第三方线程池(如 Netty 的EventLoopGroup)不提供该方法,需查对应文档 - 如果使用 Spring 的
ThreadPoolTaskExecutor,它封装了ThreadPoolExecutor,可通过getThreadPoolExecutor().getActiveCount()获取

















