1 引入多线程的目的
Java特性之一就是支持多线程,引用多线程的目的充分利用cpu资源。
2 概念
理发这件事需要洗剪吹几个过程。
- 理发就是一个进程,他包含了理发的完整的过程。
- 而洗、剪、吹都是线程,用来执行理发这个进程的不同部分
- 洗剪吹三个线程可以共享进程所拥有的全部资源,比如椅子,镜子,吹风机等
2.1 程序
程序是为完成特点任务,用某种语言编写的一组指令的集合,即代码的集合。
2.2 进程
进程是指程序的一次动态执行过程,每个程序都对应着一个进程。一个进程包含了从代码加载到执行完成的一个完整过程,进程是操作系统资源分配的最小单元。
2.3 线程
-
线程是进程中执行运算的最小单位,是被系统独立调度和分派的基本单位。每个进程至少拥有一个线程,反过来一个线程只能属于一个进程。同属于一个进程的线程可以共享进程所拥有的全部资源。
-
一个线程可以创建和撤销另一个线程,同一进程下的多个线程可以并发执行。
-
线程可以对进程的所有资源进行调度和运算。
-
线程既可以由操作系统内核来控制调度,也可以由用户程序进行控制调度。
优点:
- 易于调度
- 提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分
- 开销少。创建线程比创建进程要快,所以开销少
- 利于充分发挥多处理器的功能。通过创建多线程的进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。
2.4 简单理解:程序、进程、线程
- 打开腾讯会议,就是开了一个进程。
- 腾讯会议这个进程里,传输声音是一个线程,录制视频是一个线程,输入文字是一个线程。也就是说多个线程做的多个工作,组成一个完整的进程。
- 进程就是正在执行的程序。
2.5 进程与线程的区别
2.6 串行、并行与并发
串行:多个任务,执行时一个执行完再执行另一个
并发: 是指一个或若干个CPU对多个进程和线程之间进行多路复用,即CPU轮着执行多个任务,每个任务都执行一小段时间,从宏观上看起来就像是全部任务都在同时执行一样。
并行: 则是指多个进程或线程同一时刻被执行,这是真正意义上的同时执行,它必须要有多个CPU支持。
如上图,对于并发来说,线程一线执行一段时间,然后线程二再执行一段时间,接着线程三再执行一段时间。每个线程都轮流得到CPU的执行时间,这种情况下只需要一个CPU即能够实现。
对于并行来说,线程一、线程二和线程三是同时执行的,这种情况下需要三个CPU才能实现。并发和并行都提升了CPU的资源利用率
3 什么时候用到多线程?
-
高并发。系统接受实现多用户多请求的高并发时,通过多线程来实现。
-
线程后台处理大任务。一个程序是线性执行的。如果程序执行到要花大量时间处理的任务时,那主程序就得等待其执行完才能继续执行下面的。那么用户就不得不等待它执行完。
这时候可以开线程把花大量时间处理的任务放在线程处理,这样线程在后台处理时,主程序也可以继续执行下去,用户就不需要等待。线程执行完后执行回调函数
-
大任务。大任务处理起来比较耗时,这时候可以用多个线程并行来加快处理