使用JMX可以查看一个普通的java程序包含哪些线程,代码记录如下:
public static void main(String[] args){
// 获取java线程管理器MXBean
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
// lockedMonitors参数表示是否获取同步的monitor信息,lockedSynchronizers表示是否获取同步的synchronizer
ThreadInfo[] infos = threadMXBean.dumpAllThreads(false,false);
for(ThreadInfo info : infos){
// 打印线程ID和线程名字
System.out.println("["+info.getThreadId()+"]"+info.getThreadName());
}
}
打印结果如下:
[8]JDWP Command Reader
[7]JDWP Event Helper Thread
[6]JDWP Transport Listener: dt_socket
[5]Attach Listener
[4]Signal Dispatcher // 分发处理发送给JVM信号的线程
[3]Finalizer // 调用对象finalize方法的线程
[2]Reference Handler // 清除Reference的线程
[1]main // main线程,用户程序入口