多线程
本章要学习的内容:
- 专题1:相关概念的理解
- 专题2:多线程创建方式一:继承Thread类
- 专题3:多线程创建方式二:实现Runnable接口
- 专题4:Thread类的常用方法
- 专题5:多线程的优点、使用场景、Thread的生命周期
- 专题6:卖票案例、引出线程安全问题,引出同步机制
- 专题7:使用同步代码块解决线程安全问题
- 专题8:使用同步方法解决线程安全问题
- 专题9:线程安全的懒汉式、死锁
- 专题10:JDK5中Lock锁的使用
- 专题11:线程的通信与基本举例
- 专题12:JDK5.0新增两种创建多线程的方式
- 专题13:本章随堂复习与企业真题
相关概念
-
程序(program):为完成特定任务,用某种语言编写的
一组指令的集合
。即指一段静态的代码
,静态对象。 -
进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。如:运行中的QQ,运行中的网易云音乐。
- 每个进程都有一个独立的内存空间,系统运行一个程序即是一个进程从创建、运行到消亡的过程。(生命周期)
- 程序是静态的,进程是动态的。
- 进程作为
操作系统调度和分配资源最小的单位
(亦是系统运行程序的基本单位),系统在运行时会为每个进程分配不同的内存区域。 - 现代的操作系统,大都是支持多进程的,支持同时运行多个程序。比如:现在学习一边使用编辑器,一遍放着音乐,同时还运行这浏览器等软件
-
线程(thread):进程可进一步细化为线程,是程序内部的
一条执行路径
。一个进程中至少有一个线程。- 一个进程同一时间若
并行
执行多个线程,就是支持多线程的。
-
线程作为
CPU调度和执行的最小单位
。 -
一个进程中的多个线程共享相同的内存单元,它们从同一个堆中分配对象,可以访问相同的变量和对象。
这就使得线程间通信更简便、高效。但多个线程操作共享的系统资源可能就会带来
安全的隐患
。 -
下图中,红框的蓝色区域为线程独享,黄色区域为线程共享。
- 一个进程同一时间若
注意:
不同的进程之间是不共享内存的。
进程之间的数据交换和通信的成本很高
线程调度
-
分时调度
所有线程
轮流使用
CPU的使用权,并且平均分配每个线程占用CPU的时间。 -
抢占式调度
让
优先级高
的线程以较大的概率
优先使用CPU。如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。
多线程程序的优点:
背景:以单核CPU为例,只使用单个线程先后完成多个任务(调用多个方法),肯定比用多个线程来完成用的时间更短,为何仍需多线程呢?
多线程程序的优点:
- 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
- 提高计算机系统CPU的利用率。
- 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利与理解和修改。
补充概念
单核CPU和多核CPU
单核CPU,在一个时间单元内,只能执行一个线程的任务。例如,可以把CPU看成是医院的医生诊室,在一定时间内只能给一个病人诊断治疗。所以单核CPU就是,代码经过前面一系列的前导操作(类似于医院挂号,比如有10个窗口挂号),然后到CPU处执行时发现,就只有一个CPU(对应一个医生),大家排队执行。
这时候想要提升系统性能,只有两个办法,要么提升CPU性能(让医生看病快点),要么多加几个CPU(多整几个医生),即为多核的CPU。
问题:多核的效率是单核的数倍吗?
譬如4核A53的CPU,性能是单核A53的4倍吗?理论上是,但是实际不可能,至少有两方面的损耗。
一个是多个核心的其他共用资源限制
。譬如,4核CPU对应的内存、cache、寄存器并没有同步扩充4倍。这就好像医院一样,1个医生换4个医生,但是做B超检查的还是一台机器,性能瓶颈就从医生转到B超检查了。另一个是多核CPU之间的协调管理损耗
。譬如多个核心同时运行两个相关的任务,需要考虑任务同步,这也需要消耗额外性能。好比公司工作,一个人的时候至少不用开会浪费时间,自己跟自己商量就行了。两个人就要开会同步工作,协调分配,所以工作效率绝对不可能达到2倍。
并行与并发
-
并行(parallel)
:指两个或多个事件在用一时刻
发生(同时发生)。指在同一时刻,有多条指令
在多个CPU
上同时
执行。比如:多个人同时做不同的事。 -
并发(concurrency)
:指两个或多个事件在同一个时间段内
发生。即在一段时间内,有多条指令
在单个CPU
上快速轮换、交替
执行,使得在宏观上具有多个进程同时执行的效果。在操作系统中,启动了多个程序,
并发
指的是在一段时间内宏观上有多个程序同时运行,这在单核CPU系统中,每一时刻只能有一个程序执行,即微观上这些程序是分时的交替运行,只不过给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。而在多核CPU系统中,则这些可以
并发
执行的程序便可以分配到多个CPU上,实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核CPU,便是多核处理器,核越多,并行
处理的程序越多,能大大的提高电脑运行的效率。