一.基礎(chǔ)概念
1.同步(Synchronous)/異步(Asynchronous)
同步或者異步通常是針對方法調(diào)用說的,同步方法調(diào)用需要等待方法結(jié)果返回,方法才能結(jié)束調(diào)用。異步方法調(diào)用直接返回,方法執(zhí)行往往在另一個線程。
2.并發(fā)和并行
并發(fā)側(cè)重多個任務(wù)交替執(zhí)行,并行則是真正的同時執(zhí)行,一般只有多核才會出現(xiàn)并發(fā)運(yùn)行,單核CPU只是多個任務(wù)的交替執(zhí)行。
3.阻塞和非阻塞
阻塞是指:A線程的執(zhí)行會影響B(tài)線程,當(dāng)B線程試圖訪問A線程正在使用的資源時必須等待,就會造成B線程阻塞,這種資源就叫臨界區(qū)資源,這種情況就叫阻塞。
非阻塞:相反的來說,多個線程的運(yùn)行相互之間不會相互影響,就是非阻塞的。
4.死鎖/饑餓/活鎖
死鎖:多個任務(wù)運(yùn)行時,各自占用著對方需要的臨界區(qū)資源,導(dǎo)致每個任務(wù)都無法運(yùn)行的情況。例如銀行家吃飯問題。
饑餓:多個任務(wù)運(yùn)行時,高優(yōu)先級任務(wù)不管搶占低優(yōu)先級任務(wù)資源,造成低優(yōu)先級任務(wù)無法正常執(zhí)行,但是低優(yōu)先級任務(wù)在未來也有機(jī)會正常執(zhí)行,這種情況就叫饑餓。
活鎖:相對死鎖而言,活鎖不是相互競爭資源造成的任務(wù)無法正常執(zhí)行,是線程間相互謙讓造成的。
5.原子性
在多線程任務(wù)中,一個操作一旦開始了就不會被中斷。
6.可見性
在多線程任務(wù)中,一個線程改變了一個變量的值,其他線程可以看見修改過后的值。(緩存優(yōu)化,硬件優(yōu)化,編輯器優(yōu)化都會造成可見性問題)
7.有序性
有序性問題可能是程序在未執(zhí)行時,發(fā)生指令重排,結(jié)果指令執(zhí)行順序和代碼順序不一致。
Java多線程編程一:多線程基礎(chǔ)概念
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。