天天看點

樂觀鎖與悲觀鎖的差別

悲觀鎖總是假設最壞的的情況, 認為每次通路共享資源的時候都會被别人修改去加鎖,等鎖釋放後其他線程或者程序才能通路共享資源。(共享資源隻給一個線程用, 其他線程隻能等待該線程把鎖才能通路共享資源)

樂觀鎖總是假設最好的情況,認為每次通路共享資源的時候都不會有人修改不加鎖,但是在更新時會去判斷在此期間有沒有更新了共享資源。一般采用版本号機制或者cas算法實作。

使用場景

樂觀鎖,适用讀多寫少的場景( 當寫操作多時,多個線程通路同一共享資源,隻能有一個線程通路成功,其他的線程需要不斷的重試)

 悲觀鎖,寫多讀少的場景。