一个Java程序的运行有多个其他线程同时运行

xiaoxiao2021-03-01  24

一个Java程序的运行有多个其他线程同时运行

今天在学习《Java并发编程的艺术》这本书的时候运行了书中的一个例子。该例子是讲解Java多线程,代码的功能是打印出一个Java程序运行的时候不仅仅是main()方法的运行,而是main线程和多个其他线程的同时运行。原文代码如下:

public class MultiThread { public static void main(String[] args){ //获取Java线程管理MXBean ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); //不需要获取同步的monitor信息和synchronized,仅获取线程和线程堆栈信息 ThreadInfo [] threadInfos = threadMXBean.dumpAllThreads(true,true); //遍历线程信息,进打印线程ID和线程名称 for (ThreadInfo threadInfo:threadInfos ) { System.out.println("[" + threadInfo.getThreadId() + "] " + threadInfo. getThreadName()); } } }

程序运行结果

[6] Monitor Ctrl-Break [5] Attach Listener [4] Signal Dispatcher [3] Finalizer [2] Reference Handler [1] main

书中并没有解释这些线程分别都是做什么的,我就百度了一些,下面是我找到的一些解释:

/** * Monitor Ctrl-Break:监听中断信号?? * *Attach Listener:该线程是负责接收到外部的命令,执行该命令,并且把结果返回给发送者。通常我们会用一些命令去要求jvm给我们一些反馈信息,如:java -version、jmap、jstack等等。如果该线程在jvm启动的时候没有初始化,那么,则会在用户第一次执行jvm命令时,得到启动。 * * signal dispather: 前面我们提到第一个Attach Listener线程的职责是接收外部jvm命令,当命令接收成功后,会交给signal dispather线程去进行分发到各个不同的模块处理命令,并且返回处理结果。signal dispather线程也是在第一次接收外部jvm命令时,进行初始化工作。 * * Finalizer: JVM在垃圾收集时会将失去引用的对象包装成Finalizer对象(Reference的实现),并放入ReferenceQueue,由Finalizer线程来处理;最后将该Finalizer对象的引用置为null,由垃圾收集器来回收。 * * Reference Handler :它主要用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收问题。 * * main:主线程,用于执行我们编写的java程序的main方法。 */

对于第一个Monitor Ctrl-Break这个线程的作用在网上找了好久也没有找到一种满意的解释,希望路过的同学能够帮忙解释一下。共同学习

转载请注明原文地址: https://www.6miu.com/read-4150267.html

最新回复(0)