必須知道的幾個概念
1.同步(Synchronous)和異步(Asynchronous):同步和異步都是指方法的調(diào)用。
# 同步方法:方法調(diào)用一旦開始,調(diào)用者必須等到方法調(diào)用返回后,才能進(jìn)行后續(xù)的操作蝙搔。
# 異步方法:一旦方法被調(diào)用,則立即返回結(jié)果弃衍,調(diào)用者可以立馬進(jìn)行后續(xù)操作惊豺。異步方法通常會在另外一個線程中去執(zhí)行燎孟,當(dāng)執(zhí)行完再來通知調(diào)用者。
- 比如尸昧,去某個上場買空調(diào)揩页,當(dāng)下下單付完錢,就得一直等著老板給你打包送貨烹俗,最后把你送回家爆侣,這樣這次購物的方法調(diào)用結(jié)束。這就是同步幢妄。
- 同樣是買空調(diào)兔仰,這次是在京東上買,當(dāng)你在網(wǎng)上下完單付完錢蕉鸳,此時商家就會響應(yīng)你購物成功乎赴,接著愛干嘛就干嘛去,當(dāng)快遞到家時潮尝,快遞員電話通知你拿快遞榕吼、簽收。完事勉失,這就是異步調(diào)用羹蚣。
2.并發(fā)(Concurrency)和并行(Parallelism):并發(fā)和并行是非常容易 混淆的,他們都表示兩個或者多個任務(wù)一起執(zhí)行乱凿。
# 并發(fā):偏重于多個任務(wù)的交替執(zhí)行顽素,快速的來回切換,沒有做到真正意義上的串行告匠,只是視覺上的并行戈抄。
# 并行:多個任務(wù)真正的同時執(zhí)行。
3.臨界區(qū):表示一種公共資源或者是共享數(shù)據(jù)后专,可以供多個線程使用划鸽。但是一次只能有一個線程使用,一旦臨界資源被占用戚哎,其他的線程就不能使用裸诽,必須等待。
4.阻塞(Blocking)和非阻塞(Non-Blocking):通常形容多線程之間的互相影響
# 阻塞:比如一個線程占用了臨界資源型凳,其他需要資源的線程就會等待丈冬,導(dǎo)致線程掛起,這種情況就是阻塞甘畅。
# 非阻塞:與阻塞相反埂蕊。
5.死鎖(DeadLock):是最糟糕的情況往弓,當(dāng)多個線程都占用了彼此執(zhí)行需要的資源,造成了循環(huán)等待蓄氧。并且都不肯釋放資源函似。
6.饑餓(Starvation):指某一個或者多個線程因為種種原因無法獲得資源,導(dǎo)致一直無法執(zhí)行喉童。比如線程優(yōu)先級比較低撇寞,高優(yōu)先級的不斷搶占資源。
7.活鎖(LiveLock):死鎖的反例堂氯,如果說死鎖是“蠻不講理的霸道”蔑担,那么活鎖就是“紳士謙讓”,多個線程主動把資源謙讓釋放給其他的線程使用咽白,導(dǎo)致資源在線程之間不斷的跳動啤握,最終沒有一個線程都沒有正常執(zhí)行。