Java的悲觀鎖與樂觀鎖

2021-07-06 10:03:16 字數 350 閱讀 2685

但是,由於在程序掛起和恢復執行過程中存在著很大的開銷。當乙個執行緒正在等待鎖時,它不能做任何事,所以悲觀鎖有很大的缺點。舉個例子,如果乙個執行緒需要某個資源,但是這個資源的占用時間很短,當執行緒第一次搶占這個資源時,可能這個資源被占用,如果此時掛起這個執行緒,可能立刻就發現資源可用,然後又需要花費很長的時間重新搶占鎖,時間代價就會非常的高。

所以就有了樂觀鎖的概念,他的核心思路就是,每次不加鎖而是假設沒有衝突而去完成某項操作,如果因為衝突失敗就重試,直到成功為止。在上面的例子中,某個執行緒可以不讓出cpu,而是一直while迴圈,如果失敗就重試,直到成功為止。所以,當資料爭用不嚴重時,樂觀鎖效果更好。比如cas就是一種樂觀鎖思想的應用。

樂觀鎖又被稱為鎖的自旋

悲觀鎖與樂觀鎖

悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...

樂觀鎖與悲觀鎖

悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...

樂觀鎖與悲觀鎖

鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...