第240天学习打卡(知识点回顾 sleep/wait的区别 并发和并行)

知识点回顾

wait/sleep的区别

(1)sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。

(2)sleep不会释放锁,它也不需要占有锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)

(3)它们都可以被interrupted方法中断。

并发与并行

串行模式

串行表示所有任务都一一按先后顺序进行。

串行是一次只能取得一个任务,并执行这个任务。

并行模式

并行意味着可以同时取得多个任务,并同时去执行所得到的这些任务。并行模式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列的长度。并行的效率从代码层次上强依赖多进程/多线程代码,从硬件角度上则多依赖于多核CPU。

并发

并发指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。并发的重点在于它是一种现象,并发描述的是多进程同时运行的现象。但实际上,对于单核心CPU来说,同一时刻只能运行一个线程。所以这里的同时运行表示的不是真的同一时刻有多个线程运行的现象,这是并行的概念,而是提供一种功能让用户看来是多个程序同时运行起来了。但实际上这些程序中的进程并不是一直霸占CPU的,而是执行一会停一会。

要解决大并发问题,通常是将大任务分解成多个小任务,由于操作系统对进程的调度是随机的,所以切分成多个小任务后,可能会从任一小任务处执行,这可能会出现一些现象:

  • 可能出现一个小任务执行了多次,还没开始下个任务的情况。这时一般会采用队列或者类似的数据结构来存放各个小任务的成果。

  • 可能出现还没准备号第一步就执行第二步的可能。这时一般采用多路复用或异步的方式,比如只有准备好产生了事件通知才执行某个任务。

  • 可以多进程/多线程的方式并行执行这些小任务。也可以单进程/单线程执行这些小任务,这时候可能要配合多路复用才能达到较高的效率。

并发:同一时刻多个线程在访问同一个资源,多个线程对一个点

并行:多项工作一起执行,之后再汇总

管程:是一种同步机制,保证同一事件,只有一个线程访问被保护数据或者代码。

B站:尚硅谷2021逆袭版Java面试题第三季(java大厂面试题,周阳主讲)哔哩哔哩bilibili

posted @ 2021-09-05 22:43  豆豆tj  阅读(103)  评论(0)    收藏  举报