Java多線程并發(fā)讀寫鎖ReadWriteLock實(shí)現(xiàn)原理剖析
本文字?jǐn)?shù):3107字
預(yù)計(jì)閱讀時(shí)間:10分鐘
關(guān)于讀寫鎖

讀寫鎖的性質(zhì)
可以多個(gè)線程同時(shí)持有讀鎖,某個(gè)線程成功獲取讀鎖后其它線程仍然能成功獲取讀鎖,即使該線程不釋放讀鎖。

在某個(gè)線程持有讀鎖的情況下其它線程不能持有寫鎖,除非持有讀鎖的線程全部都釋放掉讀鎖。

在某個(gè)線程持有寫鎖的情況下其它線程不能持有寫鎖或讀鎖,某個(gè)線程成功獲取寫鎖后其它所有嘗試獲取讀鎖和寫鎖的線程都將進(jìn)入等待狀態(tài),只有當(dāng)該線程釋放寫鎖后才其它線程能夠繼續(xù)往下執(zhí)行。

如果我們要獲取讀鎖則需要滿足兩個(gè)條件:目前沒有線程持有寫鎖和目前沒有線程請(qǐng)求獲取寫鎖。

如果我們要獲取寫鎖則需要滿足兩個(gè)條件:目前沒有線程持有寫鎖和目前沒有線程持有讀鎖。

簡(jiǎn)單版本的讀寫鎖

讀鎖升級(jí)為寫鎖

寫鎖降級(jí)為讀鎖

ReentrantReadWriteLock類圖

ReentrantReadWriteLock實(shí)現(xiàn)思想



ReadLock與WriteLock

公平/非公平模式


寫鎖的實(shí)現(xiàn)

讀鎖的實(shí)現(xiàn)

一個(gè)例子

總結(jié)
我整理了一份很全的學(xué)習(xí)資料,感興趣的可以微信搜索?「猿天地?」,回復(fù)關(guān)鍵字 「學(xué)習(xí)資料?」獲取我整理好了的Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC分庫分表,任務(wù)調(diào)度框架XXL-JOB,MongoDB,爬蟲等相關(guān)資料。
后臺(tái)回復(fù)?學(xué)習(xí)資料?領(lǐng)取學(xué)習(xí)資料
如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝
評(píng)論
圖片
表情
