欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java樂(lè)觀鎖代碼示例 java 樂(lè)觀鎖代碼

樂(lè)觀鎖的示例

如一個(gè)金融系統(tǒng),當(dāng)某個(gè)操作員讀取用戶(hù)的數(shù)據(jù),并在讀出的用戶(hù)數(shù)據(jù)的基礎(chǔ)上進(jìn)行修改時(shí)(如更改用戶(hù)帳戶(hù)余額),如果采用悲觀鎖機(jī)制,也就意味著整個(gè)操作過(guò) 程中(從操作員讀出數(shù)據(jù)、開(kāi)始修改直至提交修改結(jié)果的全過(guò)程,甚至還包括操作 員中途去煮咖啡的時(shí)間),數(shù)據(jù)庫(kù)記錄始終處于加鎖狀態(tài),可以想見(jiàn),如果面對(duì)幾百上千個(gè)并發(fā),這樣的情況將導(dǎo)致怎樣的后果。

專(zhuān)注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)奉新免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

樂(lè)觀鎖機(jī)制在一定程度上解決了這個(gè)問(wèn)題。樂(lè)觀鎖,大多是基于數(shù)據(jù)版本 ( Version )記錄機(jī)制實(shí)現(xiàn)。何謂數(shù)據(jù)版本?即為數(shù)據(jù)增加一個(gè)版本標(biāo)識(shí),在基于數(shù)據(jù)庫(kù)表的版本解決方案中,一般是通過(guò)為數(shù)據(jù)庫(kù)表增加一個(gè) “version” 字段來(lái)實(shí)現(xiàn)。

讀取出數(shù)據(jù)時(shí),將此版本號(hào)一同讀出,之后更新時(shí),對(duì)此版本號(hào)加一。此時(shí),將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫(kù)表對(duì)應(yīng)記錄的當(dāng)前版本信息進(jìn)行比對(duì),如果提交的數(shù)據(jù)版本號(hào)大于數(shù)據(jù)庫(kù)表當(dāng)前版本號(hào),則予以更新,否則認(rèn)為是過(guò)期數(shù)據(jù)。

對(duì)于上面修改用戶(hù)帳戶(hù)信息的例子而言,假設(shè)數(shù)據(jù)庫(kù)中帳戶(hù)信息表中有一個(gè) version 字段,當(dāng)前值為 1 ;而當(dāng)前帳戶(hù)余額字段( balance )為 $100 。

1 操作員 A 此時(shí)將其讀出( version=1 ),并從其帳戶(hù)余額中扣除 $50( $100-$50 )。

2 在操作員 A 操作的過(guò)程中,操作員B 也讀入此用戶(hù)信息( version=1 ),并從其帳戶(hù)余額中扣除 $20 ( $100-$20 )。

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è)觀鎖策略,因此,操作員 B 的提交被駁回。

這樣,就避免了操作員 B 用基于 version=1 的舊數(shù)據(jù)修改的結(jié)果覆蓋操作員A 的操作結(jié)果的可能。

java多用戶(hù)同時(shí)修改一條數(shù)據(jù)時(shí)樂(lè)觀鎖怎么用的?

你說(shuō)的這個(gè)version是mysql底層的鎖機(jī)制提供的,并不是java提供的。

使用數(shù)據(jù)版本(Version)記錄機(jī)制實(shí)現(xiàn),這是mysql樂(lè)觀鎖最常用的一種實(shí)現(xiàn)方式。所謂的數(shù)據(jù)版本就是給數(shù)據(jù)增加一個(gè)版本標(biāo)識(shí),一般是通過(guò)為數(shù)據(jù)庫(kù)表增加一個(gè)數(shù)字類(lèi)型的 “version” 字段來(lái)實(shí)現(xiàn)。當(dāng)讀取數(shù)據(jù)時(shí),將version字段的值一同讀出,數(shù)據(jù)每更新一次,對(duì)此version值加1。當(dāng)我們提交更新的時(shí)候,判斷數(shù)據(jù)庫(kù)表對(duì)應(yīng)記錄的當(dāng)前版本信息與第一次取出來(lái)的version值進(jìn)行比對(duì),如果數(shù)據(jù)庫(kù)表當(dāng)前版本號(hào)與第一次取出來(lái)的version值相等,則予以更新,否則認(rèn)為是過(guò)期數(shù)據(jù),版本號(hào)重新讀取再做更新。

java中悲觀鎖和樂(lè)觀鎖的區(qū)別

樂(lè)觀鎖和悲觀鎖的區(qū)別如下:

1、悲觀鎖是當(dāng)線(xiàn)程拿到資源時(shí),就對(duì)資源上鎖,并在提交后,才釋放鎖資源,其他線(xiàn)程才能使用資源。

2、樂(lè)觀鎖是當(dāng)線(xiàn)程拿到資源時(shí),上樂(lè)觀鎖,在提交之前,其他的鎖也可以操作這個(gè)資源,當(dāng)有沖突的時(shí)候,并發(fā)機(jī)制會(huì)保留前一個(gè)提交,打回后一個(gè)提交,讓后一個(gè)線(xiàn)程重新獲取資源后,再操作,然后提交。和git上傳代碼一樣,兩個(gè)線(xiàn)程都不是直接獲取資源本身,而是先獲取資源的兩個(gè)copy版本,然后在這兩個(gè)copy版本上修改。

3、悲觀鎖和樂(lè)觀鎖在并發(fā)量低的時(shí)候,性能差不多,但是在并發(fā)量高的時(shí)候,樂(lè)觀鎖的性能遠(yuǎn)遠(yuǎn)優(yōu)于悲觀鎖。

4、常用的synchronized是悲觀鎖,lock是樂(lè)觀鎖。

網(wǎng)站標(biāo)題:java樂(lè)觀鎖代碼示例 java 樂(lè)觀鎖代碼
文章網(wǎng)址:http://chinadenli.net/article28/hghpcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站品牌網(wǎng)站制作微信小程序定制開(kāi)發(fā)微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)