package a一.多线程的概述;
/**
- 要先了解多线程,必须先了解线程,要了解线程,必须先了解进程,因为线程依赖于进程而存在
- 什么是进程呢?
-
通过计算机的任务管理器我们就看到进程的存在,通过观察只有运行的程序,才能出现进程。
-
所以进程就是正在运行的程序,是系统进行资源分配和调用的独立单位
-
,每一个进程都有它自己的内存空间和系统资源
- 多进程有什么意义呢?
-
单进程的计算机只能做一件事情,而我们现在的计算机都可以做多件事情
-
举例:一边玩游戏(游戏进程),一边听音乐(音乐进程)。
-
也就是说现在的计算机都是支持多进程的,就可以在一个时间段内执行多个任务。
-
并且呢,可以提高CPU的使用率。
-
问题:
-
一边玩游戏,一边听音乐是同时进行的吗?
-
答:不是,因为单CPU在某一个时间点只能做一件事情。
-
而我们在玩游戏,或者听音乐的时候,是CPU在做着程序间的高效切换让我们觉得是同时进行的。
*什么是线程呢?
-
在同一个进程内又可以执行多个任务,而这每一个任务就可以看成是一个线程
-
线程:是程序的执行单位,执行路径。是程序使用CPU的基本单位。
-
一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成
-
另外,线程是进程中的一个实体,是被系统独立调度和分配的基本单位,
-
线程自己不拥有系统资源,只拥有少量在运行中必不可少的资源,但它
-
可以与同属性一个进程的其他线程共享进程所拥有的的全部资源。一个线程
-
,可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。
-
单线程:如果程序只有一条执行路径
-
多线程:如果程序有多条执行路径
*多线程有什么意义呢?
-
多线程的存在,不是提高程序的执行速度。其实是为了提高应用程序的使用率。
-
程序的执行其实都是在抢CPU的资源,CPU的执行权。
-
多个进程是在抢这个资源,而其中某个进程如果执行的路径比较多
-
,就会有更高的几率抢到CPU的执行权。 我们是不敢保证哪一个线程
-
能够在哪一个时刻抢到,所以线程的执行有随机性 。
- 进程和线程的主要差别:
-
同样作为基本的执行单位,线程是划分的比进程更小的执行单位。
-
每一个进程都有一段专用的内存区域。与此相反,线程则共享内
-
存单元(包括代码和数据),通过共享内存单元来实现数据交换
-
实时通信与必要的同步操作。
- 举例:扫雷程序,迅雷下载
- 大家注意两个词汇的区别:并行和并发
-
前者是逻辑上同时发生,指在某一个时间内同时运行多个程序
-
后者是物理上同时发生,指在某一个时间点同时运行多个程序
- java程序的运行原理
-
由java命令启动JVM,JVM的启动就相当于启动了一个进程。
-
接着由该进程创建了一个主线程去调用main方法
- 思考题:
-
jvm虚拟机的启动时当线程还是多线程的?
-
答:是多线程的
-
原因是垃圾回收线程是要先启动的否则很容易会出现内存溢出。
-
现在的垃圾回收线程加上前面的主线程,所以最低启动了两个线程。所以jvm的启动其实是多线程