整理一下java的鎖機制。java
1.樂觀鎖與悲觀鎖(排他鎖)redis
悲觀鎖:每次拿數據的時候,都會上鎖數據庫
樂觀鎖:拿數據時不會加鎖,可是每次操做數據的時候會先比較版本。(與CAS無鎖機制相同)分佈式
2.重入鎖線程
鎖傳遞,任意線程在獲取到鎖以後,再次獲取該鎖而不會被該鎖所阻塞。Lock和synchronized都是重入鎖.循環
3.自旋鎖數據
是指當一個線程在獲取鎖的時候,若是鎖已經被其它線程獲取,那麼該線程將循環等待,而後不斷的判斷鎖是否可以被成功獲取,直到獲取到鎖纔會退出循環。兼容
4.讀寫鎖di
讀讀兼容,讀寫兼容,寫讀不兼容,寫寫不兼容阻塞
5.CAS無鎖
campare and swap 。 首先會拿出一個版本,而後操做,寫入數據庫時會與數據庫的版本比對,若是不一致就寫入失敗。
6.分佈式鎖
不一樣系統之間使用的鎖,只用過redis 實現