摘要:樂觀鎖因?yàn)闊釔?,所以拼搏。樂觀鎖的實(shí)現(xiàn)實(shí)現(xiàn)一比如一個(gè)數(shù)據(jù)庫(kù)表的結(jié)構(gòu)是三個(gè)字段當(dāng)進(jìn)行數(shù)據(jù)的更新時(shí),首先讀取其次更新實(shí)現(xiàn)二算法算法,即有三個(gè)值,內(nèi)存值,預(yù)期舊值,新值,比較內(nèi)存值是否與當(dāng)前預(yù)期值相等,如果相等,則替換新值,否則,不做任何處理。
樂觀鎖
因?yàn)闊釔?,所以拼搏? --RuiDer
前導(dǎo)必備Java并發(fā)鎖的含義
悲觀鎖
數(shù)據(jù)庫(kù)
高并發(fā)高并發(fā)簡(jiǎn)單理解就是在服務(wù)器中,成千上完個(gè)客戶端在同一時(shí)間內(nèi)發(fā) 起對(duì)服務(wù)器端的請(qǐng)求,包括數(shù)據(jù)的請(qǐng)求,這時(shí)服務(wù)器后端需要在極短時(shí)內(nèi)處 理客戶端的請(qǐng)求并且響應(yīng),在互聯(lián)網(wǎng)平臺(tái),追求的是速度和時(shí)間,所以, 這就對(duì)服務(wù)器端有非常大的考驗(yàn)。 一般客戶端發(fā)起請(qǐng)求,服務(wù)器端接到請(qǐng)求,首先去處理相應(yīng)的數(shù)據(jù), 這就涉及到數(shù)據(jù)庫(kù)中的數(shù)據(jù)操作,或者是緩存中的數(shù)據(jù)處理,總之要與數(shù)據(jù)庫(kù)打交道。 操作數(shù)據(jù)庫(kù)數(shù)據(jù)包括數(shù)據(jù)的查詢,編輯,更新等。高并發(fā)產(chǎn)生的問題
不同的線程在同一時(shí)間對(duì)同一數(shù)據(jù)的讀取和更新產(chǎn)生沖突??赡軙?huì)出現(xiàn)線程A讀取 的數(shù)據(jù)不是最新值,線程B更新的數(shù)據(jù)覆蓋其他線程對(duì)該數(shù)據(jù)的更新。這些問題 都是高并發(fā)帶來的,即高并發(fā)產(chǎn)生的問題。 高并發(fā)沖突分類: - 數(shù)據(jù)丟失 - 臟讀鎖
Java提供鎖的支持,通俗的理解就是鎖對(duì)某些數(shù)據(jù)具有保護(hù)作用,防止某一數(shù)據(jù)在同一時(shí)間 被多個(gè)線程操作。 鎖的分類: - 悲觀鎖:持保守態(tài)度,只能由某一個(gè)線程持有,其他線程等待持有鎖的線程釋放鎖。性能差 - 樂觀鎖:下面講 - 其他鎖:像自旋鎖,輕量級(jí)鎖等樂觀鎖概念
對(duì)于每一個(gè)數(shù)據(jù)或者數(shù)據(jù)集合,設(shè)有一個(gè)標(biāo)識(shí)version(字段), 當(dāng)線程讀取數(shù)據(jù)時(shí),同時(shí)會(huì)讀取出標(biāo)識(shí)版本version的值,進(jìn)行更 新時(shí),首先比較當(dāng)前數(shù)據(jù)庫(kù)字段version的值是否與讀取出的 version值相等,如果相等,則更新值,否則,作為過期值丟棄。樂觀鎖的實(shí)現(xiàn)
實(shí)現(xiàn)一: 比如一個(gè)數(shù)據(jù)庫(kù)表的結(jié)構(gòu)是 id value version三個(gè)字段 當(dāng)進(jìn)行數(shù)據(jù)的更新時(shí),首先讀?。? select value version from table where id=x; 其次更新: update table set value=newValue, version=oldVersion+1 where id=x and version=oldVersion; 實(shí)現(xiàn)二: cas算法:Compare And Swap算法,即有三個(gè)值,內(nèi)存值,預(yù)期舊值,新值, 比較內(nèi)存值是否與當(dāng)前預(yù)期值相等,如果相等,則替換新值,否則,不做任何處理。about me
我的博客
我的github
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/71543.html
摘要:公平鎖非公平鎖公平鎖公平鎖是指多個(gè)線程按照申請(qǐng)鎖的順序來獲取鎖。加鎖后,任何其他試圖再次加鎖的線程會(huì)被阻塞,直到當(dāng)前進(jìn)程解鎖。重量級(jí)鎖會(huì)讓其他申請(qǐng)的線程進(jìn)入阻塞,性能降低。 Java 中15種鎖的介紹 在讀很多并發(fā)文章中,會(huì)提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內(nèi)容如下: 公平鎖 / 非公平鎖 可重入鎖 / 不可重入鎖 獨(dú)享鎖 / 共享鎖 互斥鎖 / 讀...
摘要:樂觀鎖樂觀鎖實(shí)際上是一種邏輯思想,并不是數(shù)據(jù)庫(kù)的特性。悲觀鎖利用了存儲(chǔ)引擎的支持行鎖的特性。建議在用戶并發(fā)量不大的應(yīng)用場(chǎng)景下,采用樂觀鎖的方式。在對(duì)數(shù)據(jù)一致性要求很高的情況下,可以犧牲一下性能,采用悲觀鎖。 MySQL5.5 版本之后默認(rèn)采用innoDb 數(shù)據(jù)引擎.本文采用默認(rèn)的存儲(chǔ)引擎。 樂觀鎖 樂觀鎖實(shí)際上是一種邏輯思想,并不是mysql 數(shù)據(jù)庫(kù)的特性。這個(gè)要區(qū)分清楚。 實(shí)現(xiàn)數(shù)據(jù)版...
閱讀 2895·2021-09-02 15:11
閱讀 993·2019-08-26 18:18
閱讀 1963·2019-08-26 11:57
閱讀 3418·2019-08-23 16:59
閱讀 2087·2019-08-23 16:51
閱讀 2391·2019-08-23 16:11
閱讀 3270·2019-08-23 14:58
閱讀 1192·2019-08-23 11:34