Java中鎖的分類
1. 悲觀鎖(互斥同步鎖)
代表:synchronized、Lock相關類
示例:
- 數據庫悲觀鎖修改
-- 鎖表修改
select * from x_user for update;
缺點:
- 阻塞和喚醒帶來的性能劣勢。
- 永久阻塞,如果持有鎖的線程無限循環、死鎖等活躍性問題,那麼等待該線程釋放鎖的其它線程,將永遠也得不到執行。
- 優先級反轉,比如優先級低的線程阻塞了,導致優先級高的線程得不到執行
優點:
- 一勞永逸:正常執行時效率高、消耗低
總結:併發寫入多,讀取少的場景。適用於臨界區持鎖時間比較長的情況,悲觀鎖可以避免大量的無用自旋等消耗,典型情況:
- 臨界區的IO操作
- 臨界區代碼複雜或者循環量大