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

Java多線程鎖機(jī)制相關(guān)原理實(shí)例解析

 更新時(shí)間:2020年08月01日 11:10:51   作者:七月在野,八月在宇  
這篇文章主要介紹了Java多線程鎖機(jī)制相關(guān)原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

上下文:程序運(yùn)行需要的環(huán)境(外部變量)

上下文切換:將之前的程序需要的外部變量復(fù)制保存,然后切換到新的程序運(yùn)行環(huán)境

系統(tǒng)調(diào)用:(用戶態(tài)陷入操作系統(tǒng),通過(guò)操作系統(tǒng)執(zhí)行內(nèi)核態(tài)指令,執(zhí)行完回到用戶態(tài))用戶態(tài)——內(nèi)核態(tài)——用戶態(tài):兩次上下文切換

線程wait()方法:將自身加入等待隊(duì)列,發(fā)生了一次上下文切換

notify()方法:將線程喚醒,也發(fā)生了上下文切換

Java線程中的鎖:偏向鎖、輕量級(jí)鎖、重量級(jí)鎖。

注意:偏向鎖和輕量級(jí)鎖都沒(méi)有發(fā)生競(jìng)爭(zhēng),重量級(jí)鎖發(fā)生了競(jìng)爭(zhēng)。

偏向鎖:可重入和經(jīng)常使用某一個(gè)線程。

輕量級(jí)鎖:線程之間的切換,但是未發(fā)生競(jìng)爭(zhēng)(在一個(gè)時(shí)間段只有一個(gè)線程使用)

重量級(jí)鎖:線程時(shí)間的競(jìng)爭(zhēng)。

臨界區(qū):多個(gè)線程共享臨界區(qū),而且存在對(duì)臨界區(qū)的讀寫(xiě)。

無(wú)所狀態(tài):hashcode 31位  年齡age:4位  是否是偏向鎖:block_lock:一位:0表示不是偏向鎖

偏向鎖:thread:54位 線程id  epoch 2位,作為批量重偏向的記錄  biased_lock:1 表示為偏向鎖

輕量級(jí)鎖:ptr_to_lock_record:62位  表示,鎖記錄的指針

重量級(jí)鎖:ptr_to_heavyweight_monitor :62位  表示monitor指針

輕量級(jí)鎖的流程:

鎖記錄有兩個(gè)指針:一個(gè)指向自身,一個(gè)指向lock對(duì)象,當(dāng)lock對(duì)象位state位01時(shí),表示位輕量級(jí)鎖,此時(shí)執(zhí)行輕量級(jí)鎖的加鎖:交換lock record和markword

鎖重入:

同樣創(chuàng)建一個(gè)LockRecord  但此時(shí)cas失敗,因?yàn)榇藭r(shí)lock對(duì)象的markword為當(dāng)前鎖記錄的指針,置lockrecord指針為null,表示鎖重入,并且添加一個(gè)鎖重入計(jì)數(shù)器,記錄鎖重入的次數(shù)

解鎖:將LockRecord中的lockrecord(此時(shí)是markword)和lock對(duì)象(Object)中的markword(lockrecord指針)。如果解鎖失敗,那么輕量級(jí)鎖就會(huì)膨脹為重量級(jí)鎖。

重量級(jí)鎖的加鎖、解鎖、阻塞、喚醒:只有重量級(jí)鎖有阻塞

如上圖:當(dāng)發(fā)生競(jìng)爭(zhēng)時(shí),新的線程會(huì)將object修改為monitor指針,指向重量級(jí)鎖的monitor(管程),然后進(jìn)入等待隊(duì)列,當(dāng)當(dāng)前線程結(jié)束同步代碼塊,就會(huì)將owner置為0,此時(shí)表示沒(méi)有線程擁有此鎖,然后喚醒其他線程,其他線程就會(huì)競(jìng)爭(zhēng)這個(gè)鎖。

偏向鎖的加鎖和解鎖:新的線程只需要判斷l(xiāng)ock對(duì)象的markword對(duì)象中的線程id是否是自己的id,如果是,那么就直接使用這個(gè)鎖。不用作cas交換,只有第一次獲得此鎖時(shí)需要用cas交換

調(diào)用hashcode可以撤銷(xiāo)偏向鎖,或者對(duì)同一個(gè)對(duì)象發(fā)生鎖同步時(shí)也會(huì)撤銷(xiāo)偏向鎖

偏向鎖重定向:對(duì)于一個(gè)類(lèi)的多個(gè)實(shí)現(xiàn)類(lèi)鎖對(duì)象,當(dāng)超過(guò)20次重定向時(shí),后面該鎖的實(shí)例對(duì)象就變成了另外一個(gè)線程的偏向鎖

當(dāng)發(fā)生40次重定向時(shí),該類(lèi)的所有l(wèi)ock對(duì)象就變成了輕量級(jí)鎖。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決@Autowired注入static接口的問(wèn)題

    解決@Autowired注入static接口的問(wèn)題

    這篇文章主要介紹了解決@Autowired注入static接口的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java 如何使用正則表達(dá)式去除前導(dǎo)0

    Java 如何使用正則表達(dá)式去除前導(dǎo)0

    這篇文章主要介紹了Java 使用正則表達(dá)式去除前導(dǎo)0的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Java迭代器與Collection接口超詳細(xì)講解

    Java迭代器與Collection接口超詳細(xì)講解

    Collection也稱(chēng)集合,集合概述:集合是Java中提供的一種容器,可以用來(lái)存儲(chǔ)多個(gè)數(shù)據(jù)。Iterator(迭代器)不是一個(gè)集合,它是一種用于訪問(wèn)集合的方法,可用于迭代 ArrayList 和 HashSet 等集合
    2022-07-07
  • 淺談SpringMVC請(qǐng)求映射handler源碼解讀

    淺談SpringMVC請(qǐng)求映射handler源碼解讀

    這篇文章主要介紹了淺談SpringMVC請(qǐng)求映射handler源碼解讀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • JavaWeb ServletContext基礎(chǔ)與應(yīng)用詳細(xì)講解

    JavaWeb ServletContext基礎(chǔ)與應(yīng)用詳細(xì)講解

    ServletConfig對(duì)象,叫Servlet配置對(duì)象。主要用于加載配置文件的初始化參數(shù)。我們知道一個(gè)Web應(yīng)用里面可以有多個(gè)servlet,如果現(xiàn)在有一份數(shù)據(jù)需要傳給所有的servlet使用,那么我們就可以使用ServletContext對(duì)象了
    2023-01-01
  • Java如何從Redis中批量讀取數(shù)據(jù)

    Java如何從Redis中批量讀取數(shù)據(jù)

    這篇文章主要介紹了Java如何從Redis中批量讀取數(shù)據(jù)的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • jstl標(biāo)簽基礎(chǔ)開(kāi)發(fā)步驟(詳解)

    jstl標(biāo)簽基礎(chǔ)開(kāi)發(fā)步驟(詳解)

    下面小編就為大家?guī)?lái)一篇jstl標(biāo)簽基礎(chǔ)開(kāi)發(fā)步驟(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java中Hutool克隆功能的使用

    Java中Hutool克隆功能的使用

    本文主要介紹了Java中Hutool克隆功能的使用,cn.hutool.core.clone.Cloneable?是Hutool中提供的一個(gè)接口,用于支持對(duì)象的深度克隆操作,下面就一起來(lái)介紹一下
    2024-04-04
  • Spring?Data?JPA?在?@Query?中使用投影的方法示例詳解

    Spring?Data?JPA?在?@Query?中使用投影的方法示例詳解

    這篇文章主要介紹了Spring?Data?JPA?在?@Query?中使用投影的方法,大家需要注意如果要在 @Query 中使用投影,必須要主動(dòng)聲明要查詢的字段,并且主動(dòng)寫(xiě)明字段的別名才行,本文通過(guò)sql代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-07-07
  • java開(kāi)發(fā)ExecutorService監(jiān)控實(shí)現(xiàn)示例詳解

    java開(kāi)發(fā)ExecutorService監(jiān)控實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了java開(kāi)發(fā)ExecutorService監(jiān)控實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論

邵东县| 开阳县| 年辖:市辖区| 乌兰浩特市| 会宁县| 凌源市| 桦甸市| 肥西县| 汤原县| 鞍山市| 朔州市| 宁蒗| 遵化市| 刚察县| 深泽县| 孟连| 新平| 城固县| 浠水县| 永修县| 西青区| 康定县| 婺源县| 太保市| 军事| 通渭县| 桃江县| 常州市| 华池县| 招远市| 中宁县| 桃源县| 和静县| 永吉县| 蒙山县| 新巴尔虎左旗| 城市| 龙川县| 赣榆县| 五指山市| 罗城|