【小实验】启动一个 JVM 至少创建几个线程?
2023/5/29小于 1 分钟
启动一个 JVM 进程至少创建多少个线程呢?让我们来做一个实验吧!测试使用的 JDK 版本为 RedHat Open JDK 1.8.0.275。 示例代码如下:
public static void main(String[] args) {
Thread.currentThread().getThreadGroup().getParent().list();
}
输出:
从图中可以看到,执行这个简单的 main() 方法共创建了 6 个线程。分别是: - Reference Handler - Finalizer - Signal Dispatcher - Attach Listener - main - Monitor Ctrl-Break
system 线程组包含 4 个线程 Reference Handler、Finalizer、Signal Dispatcher、Attach Listener,main 线程组还包含两个线程 main 和 Monitor Ctrl-Break。
各个线程的作用如下:
线程 | 作用 |
---|---|
Reference Handler | 处理引用类型 |
Finalizer | 负责回收时调用对象的finalize方法 |
Signal Dispatcher | 接收信号,比如kill -9 , kill -3 |
Attach Listener | 负责接收外部的命令,例如 jmap 和 jstack,执行命令并且把结果返回给发送者 |
main | 主线程 |
Monitor Ctrl-Break | 接收ctrl+c 退出信号 |