色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Java多線程鎖機制相關原理實例解析

瀏覽:78日期:2022-08-27 16:05:13

上下文:程序運行需要的環境(外部變量)

上下文切換:將之前的程序需要的外部變量復制保存,然后切換到新的程序運行環境

系統調用:(用戶態陷入操作系統,通過操作系統執行內核態指令,執行完回到用戶態)用戶態——內核態——用戶態:兩次上下文切換

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

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

Java線程中的鎖:偏向鎖、輕量級鎖、重量級鎖。

注意:偏向鎖和輕量級鎖都沒有發生競爭,重量級鎖發生了競爭。

偏向鎖:可重入和經常使用某一個線程。

輕量級鎖:線程之間的切換,但是未發生競爭(在一個時間段只有一個線程使用)

重量級鎖:線程時間的競爭。

臨界區:多個線程共享臨界區,而且存在對臨界區的讀寫。

Java多線程鎖機制相關原理實例解析

無所狀態:hashcode 31位年齡age:4位是否是偏向鎖:block_lock:一位:0表示不是偏向鎖

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

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

重量級鎖:ptr_to_heavyweight_monitor :62位表示monitor指針

輕量級鎖的流程:

Java多線程鎖機制相關原理實例解析

鎖記錄有兩個指針:一個指向自身,一個指向lock對象,當lock對象位state位01時,表示位輕量級鎖,此時執行輕量級鎖的加鎖:交換lock record和markword

鎖重入:

Java多線程鎖機制相關原理實例解析

同樣創建一個LockRecord但此時cas失敗,因為此時lock對象的markword為當前鎖記錄的指針,置lockrecord指針為null,表示鎖重入,并且添加一個鎖重入計數器,記錄鎖重入的次數

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

重量級鎖的加鎖、解鎖、阻塞、喚醒:只有重量級鎖有阻塞

Java多線程鎖機制相關原理實例解析

如上圖:當發生競爭時,新的線程會將object修改為monitor指針,指向重量級鎖的monitor(管程),然后進入等待隊列,當當前線程結束同步代碼塊,就會將owner置為0,此時表示沒有線程擁有此鎖,然后喚醒其他線程,其他線程就會競爭這個鎖。

偏向鎖的加鎖和解鎖:新的線程只需要判斷lock對象的markword對象中的線程id是否是自己的id,如果是,那么就直接使用這個鎖。不用作cas交換,只有第一次獲得此鎖時需要用cas交換

調用hashcode可以撤銷偏向鎖,或者對同一個對象發生鎖同步時也會撤銷偏向鎖

偏向鎖重定向:對于一個類的多個實現類鎖對象,當超過20次重定向時,后面該鎖的實例對象就變成了另外一個線程的偏向鎖

當發生40次重定向時,該類的所有lock對象就變成了輕量級鎖。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 国产欧美久久久精品 | 亚洲美女视频在线 | 最新更新国内自拍视频 | 韩国一级黄色大片 | 男人天堂欧美 | 欧美成a人片在线观看久 | 欧美成人毛片在线视频 | 久久综合精品国产一区二区三区 | 99在线热播精品免费 | 国产成人精品在视频 | 一级做a爰片性色毛片中国 一级做a爰性色毛片 | 日本一区二区三区四区公司 | 亚洲va中文字幕 | 一级一片 | 亚洲综合网在线观看 | 国产精品18久久久久久久久久 | 91色视| 99久久国内精品成人免费 | 国产成人亚洲精品一区二区在线看 | 一本一道久久综合狠狠老 | 日本加勒比高清一本大道 | 国产成人高清亚洲一区久久 | 免费毛片网站 | 亚洲网在线观看 | 成人亲子乱子伦视频 | 日韩久久一区二区三区 | 日本www在线播放 | 久久男人的天堂色偷偷 | 久久99国产精品久久99 | 国产日产久久 | 一区不卡在线观看 | 欧美大狠狠大臿蕉香蕉大视频 | 国产精品路边足疗店按摩 | 亚州三级视频 | 美女张开腿让男人捅的视频 | 国产精品成人在线播放 | 怡红院宜春院 | 亚洲欧美精品一中文字幕 | 国产盗摄一区二区三区 | 综合在线播放 | 99久99久6久热在线播放 |