1.要想了解多线程,必须先了解线程,而要了解线程,需要先了解进程,因为线程是依赖于进程而存在
2.什么是进程?
通过任务管理器我们看到了进程的存在
只有运行的程序才会出现进程
进程是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。
3.多进程的意义
单进程的计算机只能做一件事情,
多进程的计算机就可以同时做多件事情(玩游戏、听音乐、看电影同时进行),在一段时间内执行多个任务。
问题:
一边玩游戏,一边听音乐是同时进行 吗?
不是,因为单CPU在某一个时间点上只能做一件事,是CPU在做着程序间的高效切换让我们觉得是同时进行的
4.什么是线程呢?
在一个进程内又可以执行多个任务,而这每一个任务我就可以看成是一个线程。
线程:是程序的执行单元,执行路径。是程序使用CPU的最基本单位
单线程:一个进程只有一条执行路径
多线程:一个进程有多条执行路径
5.多线程有什么意义?
多线程的存在,不是提高程序的执行速度,而是为了提高应用程序的使用率。
程序的执行其实都是在抢CPU的资源,CPU的执行权。
多个进程是在抢这个资源,而某一个进程的线程较多,就会有更高的几率抢到川普的执行权。
线程的执行有随机性。
6.并行和并发
并行:逻辑上同时发生,指在某一个时间内同时运行多个程序。
并发:物理上同时发生,指在某一个时间点同时运行多个程序。
7.Java程序运行原理:
7.1.由Java命令启动jvm,相当于启动了一个进程。接着由该进程创建了一个主线程去调用main方法。
7.2.思考题:
jvm虚拟机的启动时单线程的还是多线程的?
是多线程,原因是垃圾回收线程也要先启动,否则很容易出现内存溢出。
8.多线程实现方式
8.1 继承Thread类
A: 自定义类继承Thread类,
B: 重写run()方法,
因为不是类中的所有方法都要被多线程执行,Java提供了Thread类中的run()方法来包含哪些被线程执行的代码
C:创建对象,
D: 启动线程
9.run()与start()的区别
run()只是封装被线程执行的代码,直接调用就是普通方法
start()首先启动了线程,然后再由jvm调用该线程的run()方法