線程中的樂觀與悲觀鎖的區別

線程中的鎖可以分爲樂觀鎖和悲觀鎖,這兩個都是實現鎖機制的兩種辦法。
悲觀鎖:根據字面意思,悲觀,就是不是太好的。當一個線程訪問這個數據的時候,悲觀鎖會把這個數據給鎖住,不被其他線程所訪問,直到這個線程完成了對數據的提交後,其他線程才能夠訪問或者操作。這樣就帶來了不便,比如,我們在進行網上訂票的時候,一個用戶訪問了這個系統,訪問了這個系統中數據庫的數據,就把這個數據給鎖住了,這樣其他用戶根本就看不到數據。這樣顯然不行,我們想要的效果是用戶都可以訪問數據,但是隻有一個用戶提交對這個數據的修改。這就要樂觀鎖。
樂觀鎖:當用戶要對這個數據進行修改操作時,才把這個數據鎖住,也就是實現了一個用戶提交操作的用途,它的好處是,用戶在查看的時候,數據並沒有鎖住,當要修改提交的時候,把數據鎖住,當其他用戶再要提交修改時,就不能修改了。其中的樂觀鎖裏面有一個版本控制器,當修改後,版本就+1,其他用戶現在的版本還是0,這樣在提交的時候,發現版本號低於現在的,所以,要更新,之後在進行修改。

簡單的說,悲觀是進來就鎖,當前一個線程走完後面的才能走,就像在排隊一樣,而樂觀鎖對訪問資源的用戶不做限制,當有多個用戶同時修改資源的時候纔會鎖住資源讓最先操作的那一個用戶操作資源,這個時候其他用戶必須拿到修改後的資源後才能再修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章