最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ReentrantReadWriteLock不能鎖升級(jí)的原因總結(jié)

 更新時(shí)間:2021年06月30日 11:18:50   作者:skyline_wx  
今天給大家?guī)淼氖顷P(guān)于Java并發(fā)的相關(guān)知識(shí),文章圍繞著為什么ReentrantReadWriteLock不能鎖升級(jí)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下

為什么ReentrantReadWriteLock不能鎖升級(jí)

ReentrantReadWriteLock中,鎖是不可以升級(jí)的,只能降級(jí)。

也就是如果當(dāng)前線程持有了ReadLock,那么就不能再獲取WriteLock,但是,如果當(dāng)前線程持有了WriteLock,可以直接獲取ReadLock

下面用代碼嘗試一下:

Logger logger = LoggerFactory.getLogger(this.getClass());
ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();
ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();
logger.info("線程:[{}],開始readLock",Thread.currentThread().getName());
readLock.lock();
logger.info("線程:[{}],readLock成功",Thread.currentThread().getName());
logger.info("線程:[{}],開始writeLock",Thread.currentThread().getName());
writeLock.lock();
logger.info("線程:[{}],writeLock成功",Thread.currentThread().getName());

從打印結(jié)果可以看出來,程序阻塞在了writeLock.lock();這一行上。

鎖升級(jí)失敗

下面我們看一下WriteLock的加鎖過程的部分源碼:

java.util.concurrent.locks.ReentrantReadWriteLock.Sync#tryAcquire

tryAcquire

當(dāng)這個(gè)tryAcquire返回false時(shí),就跟ReentrantLock的邏輯差不多了,最后各種判斷條件都會(huì)失敗,最后,程序會(huì)阻塞在這里:java.util.concurrent.locks.AbstractQueuedSynchronizer#parkAndCheckInterrupt

parkAndCheckInterrupt

用流程圖來描述一下這個(gè)問題是這樣的:

在這里插入圖片描述

假如只有一個(gè)線程t1,當(dāng)t1已經(jīng)獲取讀鎖之后,再次獲取寫鎖,因?yàn)?code>寫鎖在加鎖時(shí)判斷到當(dāng)前鎖已經(jīng)被加過讀鎖,讀寫互斥,所以寫鎖會(huì)等待讀鎖釋放之后再加鎖。但是因?yàn)?code>讀鎖是被當(dāng)前線程持有的,所以這個(gè)等待會(huì)無限的等待下去,最后就成了死鎖。

到此這篇關(guān)于ReentrantReadWriteLock不能鎖升級(jí)的原因總結(jié)的文章就介紹到這了,更多相關(guān)ReentrantReadWriteLock不能鎖升級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 自定義線程池和線程總數(shù)控制操作

    Java 自定義線程池和線程總數(shù)控制操作

    這篇文章主要介紹了Java 自定義線程池和線程總數(shù)控制操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • RocketMQ事務(wù)消息原理與使用詳解

    RocketMQ事務(wù)消息原理與使用詳解

    RocketMQ事務(wù)消息(Transactional Message)是指應(yīng)用本地事務(wù)和發(fā)送消息操作可以被定義到全局事務(wù)中,要么同時(shí)成功,要么同時(shí)失敗。RocketMQ的事務(wù)消息提供類似 X/Open XA 的分布式事務(wù)功能,通過事務(wù)消息能達(dá)到分布式事務(wù)的最終一致
    2023-02-02
  • Spring Cloud Alibaba Nacos Config加載配置詳解流程

    Spring Cloud Alibaba Nacos Config加載配置詳解流

    這篇文章主要介紹了Spring Cloud Alibaba Nacos Config配置中心實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • JDK14的新特性:instanceof模式匹配的使用

    JDK14的新特性:instanceof模式匹配的使用

    這篇文章主要介紹了JDK 14的新特性:instanceof模式匹配的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • SpringBoot集成EasyExcel的步驟

    SpringBoot集成EasyExcel的步驟

    EasyExcel是阿里巴巴開源poi插件之一,主要解決了poi框架使用復(fù)雜,sax解析模式不容易操作,數(shù)據(jù)量大起來容易OOM,解決了POI并發(fā)造成的報(bào)錯(cuò)。主要解決方式:通過解壓文件的方式加載,一行一行的加載,并且拋棄樣式字體等不重要的數(shù)據(jù),降低內(nèi)存的占用。
    2021-06-06
  • java基于NIO實(shí)現(xiàn)群聊模式

    java基于NIO實(shí)現(xiàn)群聊模式

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)NIO實(shí)現(xiàn)群聊模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • MyBatis-Plus介紹及Spring Boot 3集成指南

    MyBatis-Plus介紹及Spring Boot 3集成指南

    本文介紹了MyBatis-Plus的基本特性及其與Spring Boot 3的集成步驟,通過使用MyBatis-Plus,開發(fā)者可以快速地搭建和開發(fā)數(shù)據(jù)訪問層,同時(shí)提高代碼質(zhì)量和開發(fā)效率,感興趣的朋友一起看看吧
    2024-05-05
  • Java實(shí)現(xiàn)常用的三種加密算法詳解

    Java實(shí)現(xiàn)常用的三種加密算法詳解

    編程中常見的加密算法有以下幾種:信息摘要算法、對(duì)稱加密算法以及非對(duì)稱加密算法。本文將利用Java實(shí)現(xiàn)這幾種常見的加密算法,需要的可以參考一下
    2022-03-03
  • JAVA多線程線程安全性基礎(chǔ)

    JAVA多線程線程安全性基礎(chǔ)

    這篇文章主要介紹了如何測(cè)試Java類的線程安全性,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • MyBatis-plus如何執(zhí)行自定義SQL

    MyBatis-plus如何執(zhí)行自定義SQL

    這篇文章主要介紹了MyBatis-plus如何執(zhí)行自定義SQL問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論

甘肃省| 尤溪县| 尼木县| 尼勒克县| 新安县| 剑阁县| 湛江市| 博白县| 延津县| 梅河口市| 芮城县| 高雄县| 互助| 罗江县| 武强县| 克什克腾旗| 南木林县| 宜章县| 浙江省| 屏东市| 诸城市| 图木舒克市| 内丘县| 庐江县| 罗甸县| 灌南县| 浦东新区| 松滋市| 鄂托克前旗| 洞口县| 色达县| 禄丰县| 通海县| 南宫市| 时尚| 茶陵县| 湖南省| 突泉县| 东台市| 汉中市| 永福县|