更新時(shí)間:2022-11-02 10:00:29 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽845次
樂(lè)觀(guān)鎖∶故名思意十分樂(lè)觀(guān),它總是認(rèn)為不會(huì)出現(xiàn)問(wèn)題,無(wú)論干什么不去上鎖!如果出現(xiàn)了問(wèn)題,再次更新值測(cè)試
悲觀(guān)鎖:故名思意十分悲觀(guān),它總是認(rèn)為總是出現(xiàn)問(wèn)題,無(wú)論干什么都會(huì)上鎖!再去操作!
我們這里主要講解樂(lè)觀(guān)鎖機(jī)制!
取出記錄時(shí),獲取當(dāng)前version
更新時(shí),帶上這個(gè)version
執(zhí)行更新時(shí), set version = newVersion where version = oldVersion
如果version不對(duì),就更新失敗
樂(lè)觀(guān)鎖的原理:就是通過(guò)version的值來(lái)進(jìn)行,判斷,樂(lè)觀(guān)鎖會(huì)在動(dòng)態(tài)的通過(guò)and拼接到where的判斷條件下,在多線(xiàn)程執(zhí)行的時(shí)候,就會(huì)通過(guò)判斷version的值來(lái),進(jìn)行具體的操作,若當(dāng)前查詢(xún)出的version的值與所查詢(xún)的值不相等,則該操作就不會(huì)被執(zhí)行。
樂(lè)觀(guān)鎖的原理:就是通過(guò)version的值來(lái)進(jìn)行,判斷
Preparing: UPDATE user SET name=?, age=?, email=?, version=?, create_time=?, update_time=?
WHERE id=? AND version=?
樂(lè)觀(guān)鎖:1、先查詢(xún),獲得版本號(hào)
version = 1
-- A
update user set name = "wang", version = version + 1
where id = 2 and version = 1
--B線(xiàn)程搶先完成,這個(gè)時(shí)候version = 2,會(huì)導(dǎo)致A修改失敗!
update user set name = "wang", version = version + 1
where id = 2 and version = 1
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)