日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java读写锁降级_java的读写锁中锁降级的问题

發(fā)布時(shí)間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java读写锁降级_java的读写锁中锁降级的问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

讀寫鎖是什么我就不多說了,下面說什么是鎖降級(jí)

鎖降級(jí):

鎖降級(jí)指的是寫鎖降級(jí)成為讀鎖。如果當(dāng)前線程擁有寫鎖,然后將其釋放,最后再獲取讀鎖,這種分段完成的過程不能稱之為鎖降級(jí)。鎖降級(jí)是指把持住(當(dāng)前擁有的)寫鎖,再獲取到讀鎖,隨后釋放(先前擁有的)寫鎖的過程。

鎖降級(jí)的必要性:

鎖降級(jí)中讀鎖的獲取是否必要呢?答案是必要的。主要是為了保證數(shù)據(jù)的可見性,如果當(dāng)前線程不獲取讀鎖而是直接釋放寫鎖, 假設(shè)此刻另一個(gè)線程(記作線程T)獲取了寫鎖并修改了數(shù)據(jù),那么當(dāng)前線程無法感知線程T的數(shù)據(jù)更新。如果當(dāng)前線程獲取讀鎖,即遵循鎖降級(jí)的步驟,則線程T將會(huì)被阻塞,直到當(dāng)前線程使用數(shù)據(jù)并釋放讀鎖之后,線程T才能獲取寫鎖進(jìn)行數(shù)據(jù)更新。

這里要著重講一講“無法感知”是什么意思:

也就是說,在另一個(gè)線程(假設(shè)叫線程1)修改數(shù)據(jù)的那一個(gè)瞬間,當(dāng)前線程(線程2)是不知道數(shù)據(jù)此時(shí)已經(jīng)變化了,但是并不意味著之后線程2使用的數(shù)據(jù)就是舊的數(shù)據(jù),相反線程2使用還是被線程1更新之后的數(shù)據(jù)。也就是說,就算我不使用鎖降級(jí),程序的運(yùn)行結(jié)果也是正確的(這是因?yàn)殒i的機(jī)制和volatile關(guān)鍵字相似)。

那么為什么還要鎖降級(jí)呢,其實(shí)目的是為了減少線程的阻塞喚醒。明顯當(dāng)不使用鎖降級(jí),線程2修改數(shù)據(jù)時(shí),線程1自然要被阻塞,而使用鎖降級(jí)時(shí)則不會(huì)?!案兄逼鋵?shí)是想強(qiáng)調(diào)讀的實(shí)時(shí)連續(xù)性,但是卻容易讓人誤導(dǎo)為強(qiáng)調(diào)數(shù)據(jù)操作。

一些優(yōu)秀的回答:

首先你沒理解讀寫鎖的意義,讀鎖的存在意味著不允許其他寫操作的存在。

按照你提供的例子,可能存在一個(gè)事務(wù)線程不希望自己的操作被別的線程中斷,而這個(gè)事務(wù)操作可能分成多部分操作更新不同的數(shù)據(jù)(或表)甚至非常耗時(shí)。如果長時(shí)間用寫鎖獨(dú)占,顯然對(duì)于某些高響應(yīng)的應(yīng)用是不允許的,所以在完成部分寫操作后,退而使用讀鎖降級(jí),來允許響應(yīng)其他進(jìn)程的讀操作。只有當(dāng)全部事務(wù)完成后才真正釋放鎖。

按你的理解如果當(dāng)中寫鎖被其他線程占用,那么這個(gè)事務(wù)線程將不得不中斷等待別的寫鎖釋放。

所以總結(jié)下鎖降級(jí)的意義應(yīng)該就是:在一邊讀一邊寫的情況下提高性能。

有興趣的可以參考下面的鏈接:

總結(jié)

以上是生活随笔為你收集整理的java读写锁降级_java的读写锁中锁降级的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。