一个普通的JAVA程序运行包含的线程
一、开门见山
1、方式一:代码查看
Java语言内置多线程就不在介绍了,一个特别普通的java程序运行时有几个线程也是同时运行的。下面通过一个程序来演示一下main线程运行的同时.
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.time.Duration;
import java.time.Instant;
/**
* Title:TestMultiThread
* Description:JMX查看一个java程序包含哪些线程
* @author XXX
* @date XXXX
*/
public class TestMultiThread {
public static void main(String[] args) {
//获取运行时间,采用Java8的时间API
Instant start=Instant.now();
//获取Java线程管理MXBean。
ThreadMXBean threadMXBean=ManagementFactory.getThreadMXBean();
//不需要获取同步的monitor和synchronized的信息,获取线程和堆栈信息
ThreadInfo[] threadInfos=threadMXBean.dumpAllThreads(false, false);
//遍历线程的信息,包括ID和线程名称
for(ThreadInfo threadInfo:threadInfos){
System.out.println("[线程的ID"+threadInfo.getThreadId()+"]"+" "+"线程的名称"+threadInfo.getThreadName());
}
Instant end=Instant.now();
System.out.println("运行的时间为:"+Duration.between(start, end).toMillis()+"ms");
}
}
程序运行结果如下:
[线程的ID5] 线程的名称Attach Listener //附加的线程监听器
[线程的ID4] 线程的名称Signal Dispatcher //分发处理发送给JVM信号的线程
[线程的ID3] 线程的名称Finalizer //调用对象的finalize方法的线程
[线程的ID2] 线程的名称Reference Handler //清除Reference的线程
[线程的ID1] 线程的名称main //mian线程
运行的时间为:30ms
简单的说明一下:ThreadMXBean 是Java虚拟机线程系统的管理接口.
ThreadInfo:返回线程信息.
2、IDEA下的Debug方式
通过运行调试即可看到多个线程信息.
这个案例说明:一个Java程序的运行不单单是main()方法在运行的,而是main线程和多个线程的同时运行的.来完成任务的.了解一 下这几个线程就可以了.