版权声明:技术太差文笔太差所以无版权可言 https://blog.csdn.net/weixin_37519752/article/details/84247298
java从诞生开始就明智的选择了内置多线程的支持,这使得java语言相对于同一时期的其他语言更具有明显得优势。线程作为操作系统调度的最小单元,多个线程能够同时执行,这将明显提升程序的性能,在多核环境中表现得更加明显。但是过多的创建线程和对线程的不当管理也容易造成问题。本章将着重介绍Java并发编程的基础知识,从启动一个线程到线程间不同的通信方式,最后通过简单得线程池力资连串联本章所介绍的内容。
一. 线程简介
1.什么是线程
现代操作系统在运行一个程序时,会为其创建一个进程。
例如启动一个Java程序,操作系统就会创建一个进程。现在操作系统调度的最小单元时线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器,堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。
一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他的线程参与,但实际上java程序天生就是多线程程序,因为执行main()方法的是一个名称为main的线程。下面使用JMX来查看一下一个普通的java程序包括那些线程。
public class MultiThread{
public static void main(String[] args) {
// 获取Java线程管理的MXBean
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
// 不需要获取同步的monitor和synchronizer信息,仅获取线程和线程堆栈信息
ThreadInfo[] threafInfos = threadMXBean.dumpAllThreads(false, false);
// 遍历线程信息,仅仅打印线程ID和线程名称信息
for (ThreadInfo threadInfo : threafInfos) {
System.out.println("[" + threadInfo.getThreadId() + "]:" + threadInfo.getThreadName());
}
}
}
输出信息
[5]:Attach Listener
[4]:Signal Dispatcher
[3]:Finalizer
[2]:Reference Handler
[1]:main
可以看到,一个程序的运行不仅仅是main方法的运行,而是main线程和其他线程同时运行