91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java多線程中的死鎖、活鎖、饑餓、無鎖是什么

發布時間:2021-11-30 14:04:13 來源:億速云 閱讀:176 作者:iii 欄目:大數據

本篇內容介紹了“java多線程中的死鎖、活鎖、饑餓、無鎖是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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

死鎖

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

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

活鎖

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

饑餓

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

無鎖

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

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

“java多線程中的死鎖、活鎖、饑餓、無鎖是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

施秉县| 盐源县| 临沧市| 措美县| 镇远县| 石家庄市| 车致| 南岸区| 台南市| 秭归县| 固始县| 天气| 贞丰县| 北安市| 汝城县| 吴川市| 南投县| 曲阜市| 衡山县| 乌兰县| 河北区| 卫辉市| 扬中市| 九龙县| 崇阳县| 江西省| 庄浪县| 丰城市| 瑞昌市| 长武县| 江永县| 无极县| 永仁县| 佳木斯市| 东乌珠穆沁旗| 桑日县| 淅川县| 洛川县| 肃宁县| 平原县| 郸城县|