JAVA 프로그램이 시작될 때 최소한 여러 스레드가 시작됩니다.

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는 기본 스레드 그룹에 있고 다른 스레드는 시스템 스레드 그룹에 있습니다.

Guess you like

Origin blog.csdn.net/SJshenjian/article/details/130657563