1

1.何为同步异步

同步指执行程序的调用着必须等上一个方法结束过后,然后调用下一个方法,继续向下执行。

例:在家煮饭的时候的时候,你等米饭煮好的时候,你并不是一直呆在电饭煲面前(还真有这样的人),而是去炒菜,但是对于同步来说,就是一直呆在电饭煲面前,等饭好了,再去炒菜,严重影响吃饭的心情,还可能被骂。

异步执行程序的调用着不必等上一个方法结束过后,然后调用下一个方法,继续向下执行。

例:在家煮饭的时候的时候,你等米饭煮好的时候,你并不是一直呆在电饭煲面前,而是去炒菜,吃饭时间大大提前。

2.何为并发并行

并发(一心二用):对于单核CPU,同一时间是只能执行一条命令,但是如何执行多线程?

还是举栗子吧:你在看电视,但是同一时间播出了你喜欢的两部电视剧,都想看,咋办,开两个屏幕,这就是一心二用,你的眼睛是左看一下,又看一下,但是你的大脑会将你分别看到的片段组合成完整的电视剧。这其中你的大脑和眼睛就是cpu,你通过不断左看右看,看完两部电视剧,cpu执行程序也是一样的,cpu通过实际上,如果系统内只有一个CPU,而使用多进程或者多线程任务,那么真实环境中这些任务不可能是真实并行的,毕竟一个CPU一次只能执行一条指令,这种情况下多进程或者多线程就是并发的,而不是并行的(操作系统会不停切换多个任务)。真实的并行也只可能出现在拥有多个CPU的系统中(比如多核CPU)。

并行(二心二用):两线程的程序,在双核上,可以每个核都执行一个线程的程序。

用某种技术,把你分成两个,左边的你看左边的电视,右边的你看右边的电视,这时你的眼睛只关注自己的电视,而不是左看右看。

但是对于结果来说,你都把电视剧看完了,即两者的结果(可能)是一样的。

3.临界区

临界区表示多线程之间的公共数据,两者都会对这个公共数据进行操作,只不过,同一时间只会有一个线程操作。

为啥同一时间只有一个线程进行操作:

还是用电饭煲举栗子:一个寝室4人,但是只有一个电饭煲,都想煮饭吃,但是某人想吃米饭,某人想吃面条(用电饭煲煮面条。。),等,但是按照我们的做法,肯定上一个人做完,下一个人才可以继续,这时这个电饭煲就是临界区,为4个人的公共数据区,但是某位天才,在你的饭里面加入面条,然后开启电饭煲的开关,这时电饭煲就不是临界区,因为同一时间多个人进行操作,最后煮出来的东西是啥,我也不知道。

反正即不是米饭,也不是面条。

4.阻塞于非阻塞

对于多线程来说,当某一线程占用当前的线程的某个资源,当前线程就会出现阻塞,一直占用一直阻塞。

举个栗子(还是电饭煲):

​ 电饭煲把饭煮好了,你准备盛饭吃,但是突然发现,你的碗被室友用来吃面了(。。。),这时的你就进入的阻塞的状态,因为你没法盛饭,碗没了,只有等你室友把洗了还给你,你在继续下面的动作,盛饭,吃饭等。

非阻塞可以看作,你把锅当碗吃起来了。

非阻塞强调,其他的线程无法对当前线程进行影响,虽然室友用了你的碗,但是对你吃饭来说没影响,(因为你用锅吃)。

5饥饿死锁于活锁

饥饿:指某一资源为当前线程需要,但是由于某种原因一直获取不到(比如线程优先级过低),导致当前线程一直无法运行,处于饥饿状态。

还是吃饭的栗子:

寝室4个人,老一老二吃了饭,但是老三老四,看到这个吃样,不想和他们一起吃,决定点外卖,但是这个时候是中午12:00,点外卖的有点多,他们决定老三点两份,帮老四点一份,但是有点节约,没vip点的东西有点少,然后下单,过了好久,老二的锅里面的饭都吃完了,饭还没送来,原来某外卖机制,优选配送vip客户,优先配送价格高的客户,自然的,他们一直就等不到自己的外卖的,然后,如何解决?? 冲VIP呀,几秒钟,外卖来了(夸张)。

所以对于线程优先级问题造成的饥饿现象,可以通过线程的优先级的调整。

死锁:对于多线程来说,多个线程之前相互持有当前线程需要的资源,而不释放,就会导致多个线程相互等待对方进行资源释放,然后一直等待下去,造成死锁。

继续吃饭:

​ 老三老四的外卖终于来了,老三知道老四经常白嫖饭,所以让他先给钱,再把外卖给他,但是老四表示,先把外卖给我,我就给你钱,所以这就造成了一个有趣的现象,老三要看见钱,才给外卖,老四要先看见外卖才给钱,然后一直这样僵持下去,对于计算机来说,计算机可不像人这么聪明,计算机是不会让步,就会一直这样僵持下去,形成死锁。

活锁:多线程都需要某一个资源,但是他发现其他的线程也需要,所以就没抢,但是其他线程也这样没抢,就造成了多个线程的等待。

继续吃饭:老三老四吃着外卖,这时老大给了他们一个肉丸子,这个丸子只有一个,然后秉着谦让的态度,老三说,老四你吃,老四说不不不,三哥吃,几轮谦让下来,谁都让对方吃,这时双方都动筷子了,同时夹向肉丸,筷子碰在一起,尴尬,然后继续对象,老三说,老四你吃,老四说不不不,三哥吃。。。无线循环。。对于计算机来说,谁也吃不到这个丸子。

不写了,吃饭去了。


超级大咸鱼
17 声望1 粉丝

当学Java的菜鸟