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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

鎖降級:

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

鎖降級的必要性:

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

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

也就是說,在另一個線程(假設叫線程1)修改數據的那一個瞬間,當前線程(線程2)是不知道數據此時已經變化了,但是并不意味著之后線程2使用的數據就是舊的數據,相反線程2使用還是被線程1更新之后的數據。也就是說,就算我不使用鎖降級,程序的運行結果也是正確的(這是因為鎖的機制和volatile關鍵字相似)。

那么為什么還要鎖降級呢,其實目的是為了減少線程的阻塞喚醒。明顯當不使用鎖降級,線程2修改數據時,線程1自然要被阻塞,而使用鎖降級時則不會。“感知”其實是想強調讀的實時連續性,但是卻容易讓人誤導為強調數據操作。

一些優秀的回答:

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

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

按你的理解如果當中寫鎖被其他線程占用,那么這個事務線程將不得不中斷等待別的寫鎖釋放。

所以總結下鎖降級的意義應該就是:在一邊讀一邊寫的情況下提高性能。

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。