1.要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在。
多线程 -- > 线程 --> 进程
2.什么是进程?
通过任务管理器我们就看到了进程的存在。
而通过观察,我们发现只有运行的程序才会出现进程。
进程:就是正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。
3.多进程有什么意义?
单进程的计算机一次只能做一件事情,而我们现在的计算机都可以同时做多件事情。
也就是现在的计算机都是支持多进程的,都可以在一个时间段内执行多个任务。
并且,可以提高CPU的使用率。(虽然单核CPU在某一个时间点上只能做一件事情,但CPU可以高效的切换各程式之间的运行,切换的间隔时间非常短,以致我们感觉不出来)
4.什么是线程?
在一个进程内又可以执行多个任务,而每一个任务我就可以看成是一个线程。
线程: 是进程中的单个顺序控制流,是一条执行路径。(是程序使用CPU的最基本单位)
单线程:如果程序只有一条执行路径。
多线程:如果程序有多条执行路径。
5.多线程有什么意义呢?
多线程的存在,不是提高程序的执行速度,其实是为了提高程序的使用率。
程序的执行其实都是在抢CPU的资源(CPU的执行权)。
多个进程是在抢这个资源的时候,其中某一个进程如果执行路径比较多,就会有更高的几率抢到CPU的执行权。
我们不敢保证哪一个线程能在哪一个时刻抢到,所以线程的执行有随机性。
6.Java程序运行原理
java命令会启动java虚拟机(JVM),等于启动了一个应用程序,也就是启动了一个进程。
该进程会自动启动一个“主线程”,然后主线程去调用某个类的Main方法。
所以,main方法运行在主线程中,在此之前的所有程序都是单线程的。
思考:JVM虚拟机的启动是单线程还是多线程?
JVM虚拟机的启动首先会有一个主线程,除此之外,垃圾回收线程也需要启动,否则很容易就会出现内存溢出。
因此,至少启动了两个线程,属于多线程。
原文:https://www.cnblogs.com/benon94/p/14508022.html