一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java中的悲觀(guān)鎖與樂(lè)觀(guān)鎖是什么

Java中的悲觀(guān)鎖與樂(lè)觀(guān)鎖是什么

2020-09-09 00:27崔笑顏 Java教程

這篇文章主要介紹了Java中的悲觀(guān)鎖與樂(lè)觀(guān)鎖是什么,幫助大家更好的理解和學(xué)習(xí)Java鎖的相關(guān)知識(shí),感興趣的朋友可以了解下

樂(lè)觀(guān)鎖對(duì)應(yīng)于生活中樂(lè)觀(guān)的人總是想著事情往好的方向發(fā)展,悲觀(guān)鎖對(duì)應(yīng)于生活中悲觀(guān)的人總是想著事情往壞的方向發(fā)展。這兩種人各有優(yōu)缺點(diǎn),不能不以場(chǎng)景而定說(shuō)一種人好于另外一種人。

悲觀(guān)鎖

總是假設(shè)最壞的情況,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)阻塞直到它拿到鎖(共享資源每次只給一個(gè)線(xiàn)程使用,其它線(xiàn)程阻塞,用完后再把資源轉(zhuǎn)讓給其它線(xiàn)程)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)里邊就用到了很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫(xiě)鎖等,都是在做操作之前先上鎖。Java中synchronized和ReentrantLock等獨(dú)占鎖就是悲觀(guān)鎖思想的實(shí)現(xiàn)。

樂(lè)觀(guān)鎖

總是假設(shè)最好的情況,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù),可以使用版本號(hào)機(jī)制和CAS算法實(shí)現(xiàn)。樂(lè)觀(guān)鎖適用于多讀的應(yīng)用類(lèi)型,這樣可以提高吞吐量,像數(shù)據(jù)庫(kù)提供的類(lèi)似于write_condition機(jī)制,其實(shí)都是提供的樂(lè)觀(guān)鎖。在Java中java.util.concurrent.atomic包下面的原子變量類(lèi)就是使用了樂(lè)觀(guān)鎖的一種實(shí)現(xiàn)方式CAS實(shí)現(xiàn)的。

兩種鎖的使用場(chǎng)景

從上面對(duì)兩種鎖的介紹,我們知道兩種鎖各有優(yōu)缺點(diǎn),不可認(rèn)為一種好于另一種,像樂(lè)觀(guān)鎖適用于寫(xiě)比較少的情況下(多讀場(chǎng)景),即沖突真的很少發(fā)生的時(shí)候,這樣可以省去了鎖的開(kāi)銷(xiāo),加大了系統(tǒng)的整個(gè)吞吐量。但如果是多寫(xiě)的情況,一般會(huì)經(jīng)常產(chǎn)生沖突,這就會(huì)導(dǎo)致上層應(yīng)用會(huì)不斷的進(jìn)行retry,這樣反倒是降低了性能,所以一般多寫(xiě)的場(chǎng)景下用悲觀(guān)鎖就比較合適。

樂(lè)觀(guān)鎖常見(jiàn)的兩種實(shí)現(xiàn)方式 樂(lè)觀(guān)鎖一般會(huì)使用版本號(hào)機(jī)制或CAS算法實(shí)現(xiàn)。

版本號(hào)機(jī)制

一般是在數(shù)據(jù)表中加上一個(gè)數(shù)據(jù)版本號(hào)version字段,表示數(shù)據(jù)被修改的次數(shù),當(dāng)數(shù)據(jù)被修改時(shí),version值會(huì)加一。當(dāng)線(xiàn)程A要更新數(shù)據(jù)值時(shí),在讀取數(shù)據(jù)的同時(shí)也會(huì)讀取version值,在提交更新時(shí),若剛才讀取到的version值為當(dāng)前數(shù)據(jù)庫(kù)中的version值相等時(shí)才更新,否則重試更新操作,直到更新成功。

舉一個(gè)簡(jiǎn)單的例子: 假設(shè)數(shù)據(jù)庫(kù)中帳戶(hù)信息表中有一個(gè) version 字段,當(dāng)前值為 1 ;而當(dāng)前帳戶(hù)余額字段( balance )為 $100 。

  1. 操作員 A 此時(shí)將其讀出( version=1 ),并從其帳戶(hù)余額中扣除 50(100-
  2. 在操作員 A 操作的過(guò)程中,操作員B 也讀入此用戶(hù)信息( version=1 ),并從其帳戶(hù)余額中扣除 20(100-
  3. 操作員 A 完成了修改工作,將數(shù)據(jù)版本號(hào)加一( version=2 ),連同帳戶(hù)扣除后余額( balance=$50 ),提交至數(shù)據(jù)庫(kù)更新,此時(shí)由于提交數(shù)據(jù)版本大于數(shù)據(jù)庫(kù)記錄當(dāng)前版本,數(shù)據(jù)被更新,數(shù)據(jù)庫(kù)記錄 version 更新為 2 。
  4. 操作員 B 完成了操作,也將版本號(hào)加一( version=2 )試圖向數(shù)據(jù)庫(kù)提交數(shù)據(jù)( balance=$80 ),但此時(shí)比對(duì)數(shù)據(jù)庫(kù)記錄版本時(shí)發(fā)現(xiàn),操作員 B 提交的數(shù)據(jù)版本號(hào)為 2 ,數(shù)據(jù)庫(kù)記錄當(dāng)前版本也為 2 ,不滿(mǎn)足 “ 提交版本必須大于記錄當(dāng)前版本才能執(zhí)行更新 “ 的樂(lè)觀(guān)鎖策略,因此,操作員 B 的提交被駁回。 這樣,就避免了操作員 B 用基于 version=1 的舊數(shù)據(jù)修改的結(jié)果覆蓋操作員A 的操作結(jié)果的可能。

CAS算法

即compare and swap(比較與交換),是一種有名的無(wú)鎖算法。無(wú)鎖編程,即不使用鎖的情況下實(shí)現(xiàn)多線(xiàn)程之間的變量同步,也就是在沒(méi)有線(xiàn)程被阻塞的情況下實(shí)現(xiàn)變量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。CAS算法涉及到三個(gè)操作數(shù)

需要讀寫(xiě)的內(nèi)存值 V 進(jìn)行比較的值 A 擬寫(xiě)入的新值 B 當(dāng)且僅當(dāng) V 的值等于 A時(shí),CAS通過(guò)原子方式用新值B來(lái)更新V的值,否則不會(huì)執(zhí)行任何操作(比較和替換是一個(gè)原子操作)。一般情況下是一個(gè)自旋操作,即不斷的重試。

以上就是Java中的悲觀(guān)鎖與樂(lè)觀(guān)鎖是什么的詳細(xì)內(nèi)容,更多關(guān)于Java 悲觀(guān)鎖與樂(lè)觀(guān)鎖的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://cloud.tencent.com/developer/article/1640012

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久永久视频 | 草草视频免费观看 | 国产精品www视频免费看 | 欧美黑人ⅹxxx片 | 久久热国产在线视频 | a级片欧美 | 精品无码久久久久久久久 | 亚洲AV无码国产精品色在线看 | daring国家队在线观看樱花动漫 | 欧美va在线播放免费观看 | 跪趴好紧h | 欧美日韩精品一区二区三区视频在线 | 日本三级在丈面前被耍了 | 无遮无挡免费视频 | 欧美精品国产一区二区三区 | 美女奶口隐私免费视频网站 | 青青青青青 | 精品无码国产污污污免费网站2 | 欧美日韩精品一区二区三区高清视频 | 9久re在线观看视频精品 | 热99re久久精品国产首页 | 国产三级精品三级男人的天堂 | 无限韩国视频免费播放 | 猫咪社区在线播放 | 午夜私人福利影院 | 国产成+人+综合+亚洲不卡 | 国产精品久久久久久久久齐齐 | 国产亚洲综合成人91精品 | 毛片在线观看网站 | 99视频免费在线观看 | 国产一区二区三区四卡 | 免费精品在线 | 草草视频在线观看最新 | 精品久久香蕉国产线看观看亚洲 | 校花在公车上被内射好舒服 | 91sao在线看片水片 | 色一情一区二区三区四区 | 色综色 | 91免费永久国产在线观看 | 日韩丝袜在线观看 | 欧美日韩中文字幕在线视频 |