日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程中的死锁、活锁、饥饿、无锁都是什么鬼? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?java多線程中的死鎖、活鎖、饑餓、無鎖都是什么鬼?


死鎖、活鎖、饑餓是關于多線程是否活躍出現的運行阻塞障礙問題,如果線程出現了這三種情況,即線程不再活躍,不能再正常地執行下去了。


死鎖


死鎖是多線程中最差的一種情況,多個線程相互占用對方的資源的鎖,而又相互等對方釋放鎖,此時若無外力干預,這些線程則一直處理阻塞的假死狀態,形成死鎖。


舉個例子,A同學搶了B同學的鋼筆,B同學搶了A同學的書,兩個人都相互占用對方的東西,都在讓對方先還給自己自己再還,這樣一直爭執下去等待對方還而又得不到解決,老師知道此事后就讓他們相互還給對方,這樣在外力的干預下他們才解決,當然這只是個例子沒有老師他們也能很好解決,計算機不像人如果發現這種情況沒有外力干預還是會一直阻塞下去的。


活鎖


活鎖這個概念大家應該很少有人聽說或理解它的概念,而在多線程中這確實存在。活鎖恰恰與死鎖相反,死鎖是大家都拿不到資源都占用著對方的資源,而活鎖是拿到資源卻又相互釋放不執行。當多線程中出現了相互謙讓,都主動將資源釋放給別的線程使用,這樣這個資源在多個線程之間跳動而又得不到執行,這就是活鎖。


饑餓


我們知道多線程執行中有線程優先級這個東西,優先級高的線程能夠插隊并優先執行,這樣如果優先級高的線程一直搶占優先級低線程的資源,導致低優先級線程無法得到執行,這就是饑餓。當然還有一種饑餓的情況,一個線程一直占著一個資源不放而導致其他線程得不到執行,與死鎖不同的是饑餓在以后一段時間內還是能夠得到執行的,如那個占用資源的線程結束了并釋放了資源。


無鎖


無鎖,即沒有對資源進行鎖定,即所有的線程都能訪問并修改同一個資源,但同時只有一個線程能修改成功。無鎖典型的特點就是一個修改操作在一個循環內進行,線程會不斷的嘗試修改共享資源,如果沒有沖突就修改成功并退出否則就會繼續下一次循環嘗試。所以,如果有多個線程修改同一個值必定會有一個線程能修改成功,而其他修改失敗的線程會不斷重試直到修改成功。之前的文章我介紹過JDK的CAS原理及應用即是無鎖的實現。


可以看出,無鎖是一種非常良好的設計,它不會出現線程出現的跳躍性問題,鎖使用不當肯定會出現系統性能問題,雖然無鎖無法全面代替有鎖,但無鎖在某些場合下是非常高效的。


總結

以上是生活随笔為你收集整理的java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。