ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
for (ThreadInfo threadInfo : threadInfos) {
System.out.println(threadInfo.getThreadId() + ":" + threadInfo.getThreadName());
}
JDK1.8 실행 결과:
6:Monitor Ctrl-Break
5:Attach Listener 接收外部JVM命令
4:Signal Dispatcher 分发到不同的模块进行处理外部JVM命令,并且返回处理结结果
3:Finalizer 调用对象的finalize方法的线程,即垃圾回收的线程
2:Reference Handler 清除reference的线程
1:main 主线程
위 스레드가 속한 스레드 그룹 및 우선 순위 보기
public class Test {
public static void main(String[] args) {
Thread threadOne = new Thread(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
threadOne.setName("threadOne");
threadOne.start();
ThreadGroup threadGroup = threadOne.getThreadGroup();
System.out.println(threadGroup);
ThreadGroup systemThreadGroup = threadGroup.getParent();
System.out.println(systemThreadGroup);
systemThreadGroup.list();
}
}
결과:
java.lang.ThreadGroup[name=main,maxpri=10]
java.lang.ThreadGroup[name=system,maxpri=10]
java.lang.ThreadGroup[name=system,maxpri=10]
Thread[Reference Handler,10,system]
Thread[Finalizer,8,system]
Thread[Signal Dispatcher,9,system]
Thread[Attach Listener,5,system]
java.lang.ThreadGroup[name=main,maxpri=10]
Thread[main,5,main]
Thread[Monitor Ctrl-Break,5,main]
Thread[threadOne,5,main]
이러한 관점에서 응용 프로그램이 시작되면 최소 6개의 스레드와 2개의 스레드 그룹(시스템 및 메인 스레드 그룹)이 생성됩니다. Break는 기본 스레드 그룹에 있고 다른 스레드는 시스템 스레드 그룹에 있습니다.