當前位置:
首頁 > 知識 > java詳解自旋鎖、阻塞鎖、重入鎖、偏向鎖、輕量鎖和重量鎖

java詳解自旋鎖、阻塞鎖、重入鎖、偏向鎖、輕量鎖和重量鎖


1、自旋鎖:

採用讓當前線程不停的在循環體內執行實現,當循環的條件被其它線程改變時才能進入臨界區

舉例如下:

java詳解自旋鎖、阻塞鎖、重入鎖、偏向鎖、輕量鎖和重量鎖

優缺點分析:

由於自旋鎖只是將當前線程不停地執行循環體,不進行線程狀態的改變,所以響應速度更快。但當線程數不停增加時,性能下降明顯,因為每個線程都需要執行,佔用CPU時間。如果線程競爭不激烈,並且保持鎖的時間段。適合使用自旋鎖。


2、阻塞鎖:

java詳解自旋鎖、阻塞鎖、重入鎖、偏向鎖、輕量鎖和重量鎖

阻塞鎖改變了線程的運行狀態,讓線程進入阻塞狀態進行等待,當獲得相應的信號(喚醒或者時間)時,才可以進入線程的準備就緒狀態,轉唄就緒狀態的所有線程,通過競爭,進入運行狀態。

優缺點分析:

阻塞鎖的優勢在於,阻塞的線程不會佔用cpu時間,不會導致 CPu佔用率過高,但進入時間以及恢復時間都要比自

旋鎖略慢。在競爭激烈的情況下 阻塞鎖的性能要明顯高於自旋鎖。


3、重入鎖:

java詳解自旋鎖、阻塞鎖、重入鎖、偏向鎖、輕量鎖和重量鎖

Java中的synchronized同步塊是可重入的。這意味著如果一個java線程進入了代碼中的synchronized同步塊,

並因此獲得了該同步塊使用的同步對象對應的管程上的鎖,那麼這個線程可以進入由同一個管程對象所同步的另

一個java代碼塊。

ReentrantLock與synchronized比較:

  1. 前者使用靈活,但是必須手動開啟和釋放鎖

  2. 前者擴展性好,有時間鎖等候(tryLock( )),可中斷鎖等候(lockInterruptibly( )),鎖投票等,適合用於高度競爭鎖和多個條件變數的地方

  3. 前者提供了可輪詢的鎖請求,可以嘗試去獲取鎖(tryLock( )),如果失敗,則會釋放已經獲得的鎖。有完善的錯誤恢復機制,可以避免死鎖的發生。

優缺點分析:

可重入鎖的最大優點就是可以避免死鎖。缺點是必須手動開啟和釋放鎖。

偏向鎖、輕量鎖和重量鎖的優缺點總結如下:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 青峰科技 的精彩文章:

深入理解 Android 控制項
Java 垃圾回收詳解
HttpDns 原理是什麼

TAG:青峰科技 |

您可能感興趣

BMJ:慢性阻塞性肺病的三聯療法
慢性阻塞性肺病的危害、預防,附:治療慢阻肺的首選用藥介紹
喝咖啡能夠防止動脈阻塞,糖:導致肥胖的最大禍水?
慢性阻塞性肺疾病急性加重期護理
毛細血管阻塞引起的
科學家從位渦梯度的角度研究北極增暖對大氣阻塞的影響
關於慢性阻塞性肺疾病的臨終治療
臨床研究:《慢性阻塞性肺疾病對非小細胞肺癌術後複發風險的影響》及特約述評
阻塞性睡眠呼吸暫停的多學科診治,看最新指南的建議
藥物+支架,全面開通阻塞的心臟血管
針對慢性阻塞性肺疾病 的新型高效抗炎納米藥物的開發研究
罕見的單純性腎囊腫:胃腸道阻塞
慢性阻塞肺病,就要打通氣管,中醫常用的治療方法
有可能消除阻塞的動脈嗎?
由於變形性疝氣變異引起的空腸阻塞:罕見的急腹症表現
蔡小蓀:調經、消癥、育種治療輸卵管阻塞
漫談受涼與慢性阻塞性肺疾病的相關性
浪潮SDS,讓視頻分發無阻塞,播出更精彩
肥胖打呼嚕嚴重,導致阻塞性睡眠呼吸暫停綜合症!
腋下淋巴阻塞,不止導致副乳,更是乳腺癌、淋巴癌乃至心臟疾病的「前奏」!艾灸:「通」在「治」前!