互斥同步锁
鎖的分類
- 這些分類是從各種不同角度出發去看的
- 這些分類并不是互斥的,也就是說多個類型可以并存,有可能一種鎖同時屬于2種類型
-
比如ReentrantLock既是互斥鎖,又是可重入鎖
為什么會誕生非互斥同步鎖(樂觀鎖)
- 互斥同步鎖(悲觀鎖)的劣勢
- 阻塞和喚醒帶來的性能劣勢
- 永久阻塞:如果持有鎖的線程被永久阻塞,比如遇到了無限循環、死鎖等活躍性問題,那么等待該線程釋放鎖的那幾個悲催線程,將永遠也得不到執行
- 優先級反轉
悲觀鎖
- 如果不鎖住這個資源,別人就會來爭搶,就會造成數據結果的錯誤,所以每次悲觀鎖為了確保結果的正確性,會在每次獲取并修改數據時,把數據鎖住,讓別人無法訪問該數據,這樣就可以確保數據萬無一失了
- Java中悲觀鎖的實現就是synchronized和Lock相關的類
?
總結