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

JAVA并發(fā)Monitor工作原理圖解

 更新時間:2025年09月29日 09:16:02   作者:嗜好ya  
Monitor是Java中實(shí)現(xiàn)互斥鎖(Mutual?Exclusion)的核心工具,本文通過圖文詳解JAVA并發(fā)Monitor工作原理,感興趣的朋友一起看看吧

一、前言

Monitor 是 Java 中實(shí)現(xiàn) 互斥鎖(Mutual Exclusion) 的核心工具。只有一個線程可以持有某個對象的 Monitor,其他線程必須阻塞等待,直到該線程釋放鎖,JVM 中每個對象在重量級鎖的情況才關(guān)聯(lián)著一個 Monitor,當(dāng)線程進(jìn)入 鎖等級為重量級的synchronized 代碼時,必須先獲得該對象的 Monitor。

二、Monitor 的數(shù)據(jù)結(jié)構(gòu)

三、Monitor 的工作流程

(1)某線程嘗試進(jìn)入同步代碼塊(monitorenter)

  • 如果 Monitor 沒有被其他線程持有,線程獲得鎖(成為 Owner)。
  • 如果已經(jīng)持有:
    • 若是當(dāng)前線程自身(重入),增加計(jì)數(shù)器。
    • 否則,進(jìn)入 Entry Queue 阻塞等待。

(2)退出同步代碼塊(monitorexit)

  • 釋放鎖:減少計(jì)數(shù)器;
  • 若計(jì)數(shù)為 0,則清空 Owner,并喚醒 Entry Queue 中的線程開始爭奪鎖。

(3)調(diào)用 wait/notify 時的行為

  • wait()
    • 當(dāng)前線程釋放鎖,加入 Wait Set,進(jìn)入等待狀態(tài);
  • notify()
    • 將 Wait Set 中隨機(jī)選擇一個線程移入 Entry Queue,等待重新競爭鎖。

工作流程圖解

線程零搶占到對象obj的鎖,此時EntryQueue中存放一二三線程等待搶鎖

此時對Thread-0調(diào)用wait()方法,Thread-0釋放鎖并且進(jìn)入WaitSet,EntryQueue隊(duì)列中的線程隨機(jī)獲取鎖,假設(shè)Thread-2獲取到鎖

此時EntryQueue中的線程處于阻塞狀態(tài)(BLOCKED),等待Thread-2釋放鎖再進(jìn)行搶鎖

而此時Thread-0線程進(jìn)入等待狀態(tài)(WAITING或TIMED_WAITING),不參與鎖的競爭,只有恢復(fù)阻塞狀態(tài)時才去參與鎖的競爭

想要從等待狀態(tài)恢復(fù)為阻塞狀態(tài)的三種方法

  • 其他線程調(diào)用notify()notifyAll()喚醒它
  • 等待超時(如果使用了wait(long timeout)方法)
  • 被中斷(調(diào)用interrupt()方法)

四、Monitor 和鎖的演進(jìn)機(jī)制

JVM 為了性能優(yōu)化,提供了 鎖優(yōu)化策略

鎖類型描述
無鎖默認(rèn)狀態(tài),適用于單線程環(huán)境,Mark Word 存儲對象的哈希碼、分代年齡等信息。
偏向鎖偏向于第一個訪問線程,后續(xù)無競爭,Mark Word 會被替換為鎖標(biāo)志位(01)和持有鎖的線程ID
輕量級鎖多線程但無阻塞,通過 CAS 競爭
  • Mark Word 會被復(fù)制到線程棧中的鎖記錄(Lock Record)

  • Mark Word 被替換為指向鎖記錄的指針(00表示輕量級鎖)

  • JVM 會撤銷偏向鎖,升級為輕量級鎖

重量級鎖Monitor 對象控制,線程進(jìn)入阻塞隊(duì)列,性能開銷大,Mark Word 中存儲指向 Monitor 對象(管程/互斥量)的指針

五、Monitor 的作用總結(jié)表

功能描述
互斥訪問確保同一時間內(nèi)只有一個線程訪問共享資源
可重入性同一線程可重復(fù)進(jìn)入臨界區(qū)
線程協(xié)作(條件變量)支持 wait/notify 機(jī)制
阻塞調(diào)度管理 Entry Queue 和 Wait Set 的線程阻塞與喚醒
性能優(yōu)化依據(jù)鎖升級的核心控制結(jié)構(gòu)

到此這篇關(guān)于JAVA并發(fā)Monitor工作原理圖解的文章就介紹到這了,更多相關(guān)java并發(fā)Monitor工作原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文學(xué)會如何在SpringBoot中使用線程池執(zhí)行定時任務(wù)

    一文學(xué)會如何在SpringBoot中使用線程池執(zhí)行定時任務(wù)

    在開發(fā)現(xiàn)代應(yīng)用程序時,定時任務(wù)是一項(xiàng)常見的需求,SpringBoot提供了一個強(qiáng)大的定時任務(wù)框架,可以輕松地執(zhí)行各種定時任務(wù),結(jié)合線程池的使用,可以更好地管理任務(wù)的執(zhí)行,提高系統(tǒng)的性能和穩(wěn)定性,本文將介紹如何在Spring Boot中使用線程池執(zhí)行定時任務(wù)
    2023-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)-HashMap詳解

    Java數(shù)據(jù)結(jié)構(gòu)-HashMap詳解

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)-HashMap,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • @Autowired注解在抽象類中失效的原因及解決

    @Autowired注解在抽象類中失效的原因及解決

    這篇文章主要介紹了@Autowired注解在抽象類中失效的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java實(shí)現(xiàn)平面山脈模型

    java實(shí)現(xiàn)平面山脈模型

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)平面山脈模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 關(guān)于在使用Lombok時maven?install找不到符號問題的解決辦法

    關(guān)于在使用Lombok時maven?install找不到符號問題的解決辦法

    Maven環(huán)境下開發(fā)項(xiàng)目時,尤其是涉及Lombok或其他依賴時,IDE會在構(gòu)建和編譯過程中進(jìn)行注解處理,這篇文章主要介紹了關(guān)于在使用Lombok時maven?install找不到符號問題的解決辦法,需要的朋友可以參考下
    2025-10-10
  • Java中的ConcurrentHashMap原理詳解

    Java中的ConcurrentHashMap原理詳解

    這篇文章主要介紹了Java中的ConcurrentHashMap原理詳解,ConcurrentHashMap和HashMap一樣,是一個存放鍵值對的容器,使用hash算法來獲取值的地址,因此時間復(fù)雜度是O(1),查詢非???需要的朋友可以參考下
    2023-12-12
  • Spring?Boot?集成?Swagger2構(gòu)建?API文檔

    Spring?Boot?集成?Swagger2構(gòu)建?API文檔

    這篇文章主要介紹了Spring?Boot?集成?Swagger2構(gòu)建?API文檔,通過使用?Swagger,我們只需要按照它所給定的一系列規(guī)范去定義接口以及接口的相關(guān)信息,然后它就能幫我們自動生成各種格式的接口文檔,方便前后端開發(fā)者進(jìn)行前后端聯(lián)調(diào),下文需要的朋友可以參考一下
    2022-03-03
  • SpringBoot Maven升級自帶的jar包版本問題

    SpringBoot Maven升級自帶的jar包版本問題

    這篇文章主要介紹了SpringBoot Maven升級自帶的jar包版本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java過濾器Filter詳解

    Java過濾器Filter詳解

    這篇文章主要介紹了java過濾器中Filter,發(fā)送請求時,如果有不符合的信息將會被filter進(jìn)行攔截,如果符合則會進(jìn)行放行。如果感興趣可以來學(xué)習(xí)一下
    2021-08-08
  • 詳談Java幾種線程池類型介紹及使用方法

    詳談Java幾種線程池類型介紹及使用方法

    下面小編就為大家?guī)硪黄斦凧ava幾種線程池類型介紹及使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論

武宁县| 南昌市| 友谊县| 西乌珠穆沁旗| 天镇县| 名山县| 大足县| 尚义县| 福建省| 隆昌县| 东兴市| 安塞县| 西畴县| 龙州县| 梁山县| 九江市| 卓尼县| 陆良县| 镇远县| 郯城县| 安图县| 始兴县| 九江市| 黄平县| 平泉县| 襄城县| 阿尔山市| 沁阳市| 晋江市| 晋中市| 金溪县| 太湖县| 大丰市| 梁河县| 青田县| 华亭县| 新野县| 高雄市| 漳州市| 新乡县| 伊吾县|