You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Thread.activeCount()方法返回值为2?

为什么Thread.activeCount()返回值为2?

你的代码返回2的核心原因是:JVM启动时除了main线程,还会自动创建几个系统守护线程,这些线程和main线程属于同一个线程组,所以被Thread.activeCount()统计在内了。

你提到的“子线程组”其实不是问题所在——额外的线程就在main线程所在的根线程组里。常见的系统守护线程包括:

  • 垃圾回收(GC)相关线程(比如Reference Handler、Finalizer)
  • JVM内部的其他后台服务线程

验证方法:列出当前线程组的所有线程

你可以通过以下代码打印出当前线程组里的所有活跃线程,直观看到这些线程:

public class Main {
    public static void main(String[] args) {
        // 获取当前线程所在的线程组
        ThreadGroup group = Thread.currentThread().getThreadGroup();
        // 创建数组存储线程
        Thread[] threads = new Thread[group.activeCount()];
        // 枚举线程组内的线程
        group.enumerate(threads);
        
        // 打印每个线程的名字
        for (Thread thread : threads) {
            System.out.println("活跃线程:" + thread.getName());
        }
    }
}

运行这段代码,你会看到类似输出:

活跃线程:main
活跃线程:Reference Handler

(不同JVM版本可能输出的线程名字略有差异,但肯定会包含除main外的其他线程)

补充说明

Thread.activeCount()返回的是估计值,因为线程的状态可能在统计过程中发生变化,但对于你的简单场景,这个值是准确的。这些系统守护线程是JVM正常运行必需的,它们会在后台默默处理任务,不会影响你的业务逻辑,而且当所有非守护线程(比如main线程)结束时,JVM会自动终止这些守护线程并退出。

内容的提问来源于stack exchange,提问作者Alexandru Lolea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:06