java詳解自旋鎖、阻塞鎖、重入鎖、偏向鎖、輕量鎖和重量鎖
1、自旋鎖:
採用讓當前線程不停的在循環體內執行實現,當循環的條件被其它線程改變時才能進入臨界區
舉例如下:
優缺點分析:
由於自旋鎖只是將當前線程不停地執行循環體,不進行線程狀態的改變,所以響應速度更快。但當線程數不停增加時,性能下降明顯,因為每個線程都需要執行,佔用CPU時間。如果線程競爭不激烈,並且保持鎖的時間段。適合使用自旋鎖。
2、阻塞鎖:
阻塞鎖改變了線程的運行狀態,讓線程進入阻塞狀態進行等待,當獲得相應的信號(喚醒或者時間)時,才可以進入線程的準備就緒狀態,轉唄就緒狀態的所有線程,通過競爭,進入運行狀態。
優缺點分析:
阻塞鎖的優勢在於,阻塞的線程不會佔用cpu時間,不會導致 CPu佔用率過高,但進入時間以及恢復時間都要比自
旋鎖略慢。在競爭激烈的情況下 阻塞鎖的性能要明顯高於自旋鎖。
3、重入鎖:
Java中的synchronized同步塊是可重入的。這意味著如果一個java線程進入了代碼中的synchronized同步塊,
並因此獲得了該同步塊使用的同步對象對應的管程上的鎖,那麼這個線程可以進入由同一個管程對象所同步的另
一個java代碼塊。
ReentrantLock與synchronized比較:
前者使用靈活,但是必須手動開啟和釋放鎖
前者擴展性好,有時間鎖等候(tryLock( )),可中斷鎖等候(lockInterruptibly( )),鎖投票等,適合用於高度競爭鎖和多個條件變數的地方
前者提供了可輪詢的鎖請求,可以嘗試去獲取鎖(tryLock( )),如果失敗,則會釋放已經獲得的鎖。有完善的錯誤恢復機制,可以避免死鎖的發生。
優缺點分析:
可重入鎖的最大優點就是可以避免死鎖。缺點是必須手動開啟和釋放鎖。
偏向鎖、輕量鎖和重量鎖的優缺點總結如下:
※深入理解 Android 控制項
※Java 垃圾回收詳解
※HttpDns 原理是什麼
TAG:青峰科技 |
※BMJ:慢性阻塞性肺病的三聯療法
※慢性阻塞性肺病的危害、預防,附:治療慢阻肺的首選用藥介紹
※喝咖啡能夠防止動脈阻塞,糖:導致肥胖的最大禍水?
※慢性阻塞性肺疾病急性加重期護理
※毛細血管阻塞引起的
※科學家從位渦梯度的角度研究北極增暖對大氣阻塞的影響
※關於慢性阻塞性肺疾病的臨終治療
※臨床研究:《慢性阻塞性肺疾病對非小細胞肺癌術後複發風險的影響》及特約述評
※阻塞性睡眠呼吸暫停的多學科診治,看最新指南的建議
※藥物+支架,全面開通阻塞的心臟血管
※針對慢性阻塞性肺疾病 的新型高效抗炎納米藥物的開發研究
※罕見的單純性腎囊腫:胃腸道阻塞
※慢性阻塞肺病,就要打通氣管,中醫常用的治療方法
※有可能消除阻塞的動脈嗎?
※由於變形性疝氣變異引起的空腸阻塞:罕見的急腹症表現
※蔡小蓀:調經、消癥、育種治療輸卵管阻塞
※漫談受涼與慢性阻塞性肺疾病的相關性
※浪潮SDS,讓視頻分發無阻塞,播出更精彩
※肥胖打呼嚕嚴重,導致阻塞性睡眠呼吸暫停綜合症!
※腋下淋巴阻塞,不止導致副乳,更是乳腺癌、淋巴癌乃至心臟疾病的「前奏」!艾灸:「通」在「治」前!