更新時間:2022-08-31 10:28:19 來源:動力節(jié)點 瀏覽1203次
相信大家對線程鎖分類已經(jīng)有所了解,其中就有悲觀鎖和樂觀鎖。在悲觀鎖定中,當用戶打開數(shù)據(jù)進行更新時,會授予鎖定。其他用戶只能查看數(shù)據(jù),直到數(shù)據(jù)更新的整個事務完成。
在樂觀鎖定中,打開一個數(shù)據(jù)以供多個用戶更新。僅在更新事務期間而不是整個會話期間授予鎖定。由于這種并發(fā)性增加并且是更新數(shù)據(jù)的實用方法。
樂觀鎖的概念:
樂觀鎖:指的是在操作數(shù)據(jù)的時候非常樂觀,樂觀地認為別人不會同時修改數(shù)據(jù),因此樂觀鎖默認是不會上鎖的,只有在執(zhí)行更新的時候才會去判斷在此期間別人是否修改了數(shù)據(jù),如果別人修改了數(shù)據(jù)則放棄操作,否則執(zhí)行操作。
沖突比較少的時候, 使用樂觀鎖(沒有悲觀鎖那樣耗時的開銷) 由于樂觀鎖的不上鎖特性,所以在性能方面要比悲觀鎖好,比較適合用在DB的讀大于寫的業(yè)務場景。
悲觀鎖的概念:
悲觀鎖:指的是在操作數(shù)據(jù)的時候比較悲觀,悲觀地認為別人一定會同時修改數(shù)據(jù),因此悲觀鎖在操作數(shù)據(jù)時是直接把數(shù)據(jù)上鎖,直到操作完成之后才會釋放鎖,在上鎖期間其他人不能操作數(shù)據(jù)。
沖突比較多的時候, 使用悲觀鎖(沒有樂觀鎖那么多次的嘗試)對于每一次數(shù)據(jù)修改都要上鎖,如果在DB讀取需要比較大的情況下有線程在執(zhí)行數(shù)據(jù)修改操作會導致讀操作全部被掛載起來,等修改線程釋放了鎖才能讀到數(shù)據(jù),體驗極差。所以比較適合用在DB寫大于讀的情況。
讀取頻繁使用樂觀鎖,寫入頻繁使用悲觀鎖。
悲觀鎖定:
更新數(shù)據(jù)時,記錄被鎖定,其他人無法訪問該記錄進行更新。它成為只讀記錄,直到鎖被釋放。一旦鎖定被釋放,記錄可以再次被鎖定并為不同的用戶更新。
樂觀鎖定:
這允許多個用戶打開相同的記錄進行更新。只有在更新記錄時,記錄才會被鎖定。這是 Web 應用程序最優(yōu)選的鎖定方式。
本站中多線程教程中還有更多的相關(guān)知識等著大家去學習,這是掌握多線程線程鎖種類的必學內(nèi)容,為我們后面學習多線程的更多內(nèi)容打下堅實的基礎(chǔ)。