目錄
- 概述
- 鎖分類
- 按上鎖方式劃分
- 按特性劃分
- 悲觀鎖/樂觀鎖
- 重入鎖/不可重入鎖
- 公平鎖/非公平鎖
- 獨享鎖/共享鎖
- 其它
- 自旋鎖
- 分段鎖
- 無鎖/偏向鎖/輕量級鎖/重量級鎖
- 結束
概述
java
鎖分類,雖是概念,很常見。
鎖分類
按上鎖方式劃分
鎖 | 關鍵字 | 解釋 |
---|---|---|
隱式鎖 | synchronized | 不需要顯示加鎖和解鎖 |
顯示鎖 | juc包中提供的鎖 | 需要顯示加鎖和解鎖 |
按特性劃分
悲觀鎖/樂觀鎖
按照線程在使用共享資源
鎖 | 關鍵字 | 解釋 |
---|---|---|
悲觀鎖 | juc鎖,synchronized | |
樂觀鎖 | cas | 關系型數據庫的版本號機制 |
重入鎖/不可重入鎖
按照同一個線程是否可以重復獲取同一把鎖,劃分為重入鎖和不可重入鎖
- 重入鎖:ReentrantLock、synchronized
- 不可重入鎖:不可重入鎖,與可重入鎖相反,線程獲取鎖之后不可重復獲取鎖,重復獲取會發生死鎖。
公平鎖/非公平鎖
**按照多個線程競爭同一鎖時需不需要排隊,能不能插隊,**劃分為公平鎖和非公平鎖。
獨享鎖/共享鎖
按照多個線程能不能同時共享同一個鎖,鎖劃分為獨享鎖和共享鎖。
獨享鎖和共享鎖是不能同時存在的。
- 獨享鎖:獨享鎖也叫排他鎖,synchronized、ReentrantLock、ReentrantReadWriteLock的WriteLock寫鎖
- 共享鎖:ReentrantReadWriteLock的ReadLock讀鎖
其它
自旋鎖
實現:CAS
分段鎖
實現:ConcurrentHashMap
無鎖/偏向鎖/輕量級鎖/重量級鎖
- 這四個鎖是synchronized獨有的四種狀態,級別從低到高依次是:無鎖、偏向鎖、輕量級鎖和重量級鎖
- 它們是jvm為了提高synchronized鎖的獲取與釋放效率而做的優化
- 四種狀態會隨著競爭的情況逐漸升級,而且是不可逆的過程,即不可降級。
結束
并發中的各種鎖概念,至此就結束了,如有疑問,歡迎評論區留言。