《第四章 Java核心类库》
第5节 Java多线程
1. 进程与线程
- 进程
是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间进程,是系统进行资源分配和调度的一个独立单位.
- 线程
线程是进程的一个实体(执行路径),是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程之间可以自由切换,并发执行。
线程实际上是在进程基础之上的进一步划分, 一个进程最少有一个线程。一个进程启动之后,里面的若干执行路径又可以划分成若干个线程。相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,共享一个堆内存,拥有自己的栈空间和局部变量,拥有独立的执行序列。
2. 线程调度
- 分时调度
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
- 抢占式调度
优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),
Java使用的为
- 抢占式调度。
CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核新而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是 在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的 使用率更高。
3. 同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronouscommunication)。
- 同步
排队执行 , 效率低但是安全.。就是调用某个东西时,调用方需要等待这个调用返回结果才能继续往后执行。
- 异步
同时执行 , 效率高但是数据不安全。和同步相反 调用方不会立即得到结果,而是在调用发出后,调用者可以继续执行后续操作,被调用者通过状态、通知来通知调用者,或者通过回掉函数来处理这个调用。
举例子:
去店里买饭时,我们点好了菜,这时就只能在店里,等待店家炒菜打包好,我们才能离开,这就是同步;而异步就是,我们可以在饿了么上下单,我们可以出去散步、打球,等外卖到了,我们去收货就行了。
4. 并发与并行
- 并发
指两个或多个事件在同一个时间段内发生。无论上一个开始执行的任务是否完成,当前都可以开始执行。只有一个执行单元。
- 并行
指两个或多个事件在同一时刻发生(同时发生)。有多个执行单元。
举例子:
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
并发的关键是你有处理多个任务的能力,不一定要同时。
并行的关键是你有同时处理多个任务的能力。
下一站是Java线程的3种生成方式,有需要的小伙伴可以前往学习哦。附链接:
https://blog.csdn.net/weixin_44394910/article/details/117963731