如果程序只有一条执行路径,那么给程序就是单线程程序
如果程序有多条执行路径,那么该程序就是多线程程序
1:要想了解多线程,就必须了解线程,要想了解线程,就必须了解进程,因为线程是依赖于进程存在的
2、什么是进程:通过任务管理器可以看到进程的存在,只有运行的程序才会出现在进程中
进程:就是正在运行的程序,是系统进行资源分配和调用的独立单位,每一个进程都有自己的内存空间和系统资源
3、多进程的意义:
单进程的计算机只能做一件事情,而现在的计算机可以做多件事情
现在的计算机是可以支持多进程,就是可以在一个时间段执行多个任务
多进程的可以提高cpu的使用率
问题:一边玩游戏,一边听音乐是同时进行的吗?
不是,单核cpu在某一时间点上只能做一件事情
而在玩游戏和听音乐的时候,是cpu在做着程序间的高效切换让我们觉得是同时进行的
4、什么是多线程:
在一个进程内可以执行多个任务,而这每一个任务可以看作是一个线程
线程:是程序的执行单元,执行路径,是程序使用cpu的基本单位
单线程:如果程序只有一条执行路径
多线程:如果程序有多条执行路径
5、多线程的的意义:
多线程的存在,而不是提高程序的执行速度 ,其实是为了提高程序的使用率
程序的执行其实都是在抢CPU的资源、cpu的执行权
而多个进程是在抢这个资源,而其中的某一个进程如果执行路径比较多,就会有更高的几率抢到CPU的执行权
我们是不能保证每个线程在哪个时刻抢到,所以线程的执行有随机性。
并行和并发:
前者是逻辑上同时发生的,指在某一时间内同时运行多个程序
后者是物理上同时发生的,指在某一时间点同时运行多个程序
6、java程序的运行原理:
由java命令启动了JVM,JVM启动其实就相当于启动了一个进程,
接着有该进程创建了一个主线程去调用main方法
思考题:jvm虚拟机的启动是单线程还是多线程的:
多线程
因为是垃圾回收线程要先启动,否在会出现内存溢出
现在的自己回收线程加上前面的主线程,最低是两个线程,故jvm的的程序是多线程的
面试题:
线程的生命周期:
新建:创建线程对象
就绪:有执行资格,没有执行权
运行:有资格执行,有使用权
阻塞:由于一些操作让线程处于了该状态,没有执行资格,没有执行权
而另一些操作可以被他激活,激活后就是一种就绪状态
死亡:线程对象变成垃圾,等待被回收
多线程的实现方案有两种
继承Thread类
实现Runnable接口
相比继承Thread类,实现Runnable接口的好处
避免了Java单继承的局限性 适合多个相同程序的代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好的体现 了面向对象的设计思想
- 单例模式:保证类在内存中只有一个对象
- 如何保证类在内存中只有一个对象?
- 1.构造方法私有
- 2.在成员位置创建一个对象
- 3.通过一个公共的方法提供访问