站長資訊網
        最全最豐富的資訊網站

        java面試——樂觀鎖和悲觀鎖

        java面試——樂觀鎖和悲觀鎖

        面試題目:

        樂觀鎖和悲觀鎖的區別

        (學習視頻分享:java教學視頻)

        一、樂觀鎖

        總是認為不會產生并發問題,每次去取數據的時候總認為不會有其他線程對數據進行修改,因此不會上鎖,但是在更新時會判斷其他線程在這之前有沒有對數據進行修改,一般會使用版本號機制或CAS操作實現

        version方式:

        一般是在數據表中加上一個數據版本號version字段,表示數據被修改的次數,當數據被修改時,version值會加一。當線程A要更新數據值時,在讀取數據的同時也會讀取version值,在提交更新時,若剛才讀取到的version值為當前數據庫中的version值相等時才更新,否則重試更新操作,直到更新成功。

        update table set x=x+1, version=version+1 where id=#{id} and version=#{version};

        (相關面試題推薦:java面試題及答案)

        CAS操作方式:

        即compare and swap 或者 compare and set,涉及到三個操作數,數據所在的內存值,預期值,新值。當需要更新時,判斷當前內存值與之前取到的值是否相等,若相等,則用新值更新,若失敗則重試,一般情況下是一個自旋操作,即不斷的重試。

        二、悲觀鎖

        總是假設最壞的情況,每次取數據時都認為其他線程會修改,所以都會加鎖(讀鎖、寫鎖、行鎖等),當其他線程想要訪問數據時,都需要阻塞掛起。可以依靠數據庫實現,如行鎖、讀鎖和寫鎖等,都是在操作之前加鎖,在Java中,synchronized的思想也是悲觀鎖。

        三、適用場景

        悲觀鎖:比較適合寫入操作比較頻繁的場景,如果出現大量的讀取操作,每次讀取的時候都會進行加鎖,這樣會增加大量的鎖的開銷,降低了系統的吞吐量。

        樂觀鎖:比較適合讀取操作比較頻繁的場景,如果出現大量的寫入操作,數據發生沖突的可能性就會增大,為了保證數據的一致性,應用層需要不斷的重新獲取數據,這樣會增加大量的查詢操作,降低了系統的吞吐量。

        總結:兩種所各有優缺點,讀取頻繁使用樂觀鎖,寫入頻繁使用悲觀鎖。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品亚洲永久免费精品| 国产精品亚洲高清一区二区| 国产精品偷伦视频观看免费| 丁香色婷婷国产精品视频| 精品无码国产污污污免费网站| 久久久无码精品亚洲日韩软件| 久久99精品国产99久久| 久久99精品久久久久久久不卡| 免费精品精品国产欧美在线| 9191精品国产免费久久| 成人区精品一区二区不卡 | 久久国产精品久久| 精品蜜臀久久久久99网站| 尤物TV国产精品看片在线| 久久久久久久久久免免费精品| 91精品视频观看| 亚洲精品成人av在线| 国产精品一二二区| jizz国产精品网站| 国产成人久久精品激情 | 国产精品视频一区国模私拍| 经典国产乱子伦精品视频| 无码人妻精品一区二区三区久久久 | 亚洲国产欧美日韩精品一区二区三区| 国产在线不卡午夜精品2021| 无码精品A∨在线观看| 亚洲国产成人精品女人久久久| 精品国产毛片一区二区无码| 国产成人精品一区二三区在线观看| 国产精品美女久久久久网| 国产成人亚洲综合无码精品| 久久久久无码精品国产| 日韩一区精品视频一区二区| 中文字幕日韩精品无码内射 | 亚洲国产精品成人精品无码区 | 合区精品中文字幕| 中文字幕精品无码一区二区 | 国产精品露脸国语对白| 国产92成人精品视频免费| 国产成人精品免费视频大| 精品精品国产自在久久高清|