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

Java synchronized鎖升級jol過程詳解

 更新時間:2020年04月02日 08:37:15   作者:Katsu  
這篇文章主要介紹了Java synchronized鎖升級jol過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

jol(java object layout)需要的依賴

<dependency>
      <groupId>org.openjdk.jol</groupId>
      <artifactId>jol-core</artifactId>
      <version>0.10</version>
    </dependency>

一。synchronized鎖對象的升級(膨脹)過程主要如下:

1.膨脹過程:無鎖(鎖對象初始化時)-> 偏向鎖(有線程請求鎖) -> 輕量級鎖(多線程輕度競爭)-> 重量級鎖(線程過多或長耗時操作,線程自旋過度消耗cpu);

2.jvm默認延時4s自動開啟偏向鎖(此時為匿名偏向鎖,不指向任務線程),可通過-XX:BiasedLockingStartUpDelay=0取消延時;如果不要偏向鎖,可通過-XX:-UseBiasedLocking = false來設置

3.鎖只能升級,不能降級;偏向鎖可以被重置為無鎖狀態(tài)

4.鎖對象頭記錄占用鎖的線程信息,但不能主動釋放,線程棧同時記錄鎖的使用信息,當有其他線程(T1)申請已經(jīng)被占用的鎖時,先根據(jù)鎖對向的信息,找對應線程棧,若線程已結束,則鎖對象先被置為無鎖狀態(tài),再被T1線程占有后置為偏向鎖;若線程位結束,則鎖狀態(tài)由當前偏向鎖升級為輕量級鎖。

5.偏向鎖和輕量級鎖在用戶態(tài)維護,重量級鎖需要切換到內(nèi)核態(tài)(os)進行維護;

二。鎖對象頭(markword部分,8字節(jié))使用不同的狀態(tài)進行表示,64位虛擬機的markword如下所示:

使用jol演示如下:

1.無鎖狀態(tài)

Object object = new Object(); System.out.println("hash: " + object.hashCode()); System.out.println(ClassLayout.parseInstance(object).toPrintable());

header中前8個字節(jié)按照平時習慣的從高位到低位的展示為:00000000 00000000 00000000 00111001 10101110 11101101 00101111 00000001

對照上圖,最后3位是001,無鎖狀態(tài),中間31位(0111001 10101110 11101101 00101111)換算成十進制即為上圖打印的hash:967765295

2.匿名偏向鎖和偏向鎖

Thread.sleep(5000); //等待jvm開啟偏向鎖
    Object o = new Object();
    System.out.println(ClassLayout.parseInstance(o).toPrintable());

    synchronized (o){
      System.out.println(ClassLayout.parseInstance(o).toPrintable());
    }

第一次打印為匿名偏向,第二次偏向鎖指向了main線程

注意:用run啟動程序,不要用debug,實驗的時候,用debug啟動,第二次打印直接升級輕量級鎖。

3.輕量級鎖

public static void main(String[] args) throws InterruptedException {
    Thread.sleep(5000);
    Object o = new Object();
    synchronized (o) {
      System.out.println(ClassLayout.parseInstance(o).toPrintable());
    }
    for (int i = 0; i < 1; i++) {
      Thread t = new Thread(() -> {
        print(o);
      });
      t.start();
    }
  }

  public static void print(Object o) {
    synchronized (o){
      System.out.println(ClassLayout.parseInstance(o).toPrintable());
    }
  }

4.重量級鎖

public static void main(String[] args){
    Object o = new Object();
    for (int i = 0; i < 2; i++) {
      Thread t = new Thread(() -> {
        print(o);
      });
      t.start();
    }
  }

  public static void print(Object o) {
    synchronized (o){
      System.out.println(ClassLayout.parseInstance(o).toPrintable());
    }
  }

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot在生產(chǎn)快速禁用Swagger2的方法步驟

    SpringBoot在生產(chǎn)快速禁用Swagger2的方法步驟

    這篇文章主要介紹了SpringBoot在生產(chǎn)快速禁用Swagger2的方法步驟,使用注解關閉Swagger2,避免接口重復暴露,非常具有實用價值,需要的朋友可以參考下
    2018-12-12
  • java實現(xiàn)微信支付結果通知

    java實現(xiàn)微信支付結果通知

    這篇文章主要為大家詳細介紹了java實現(xiàn)微信支付結果通知,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • JDBC如何通過SSL方式連接MySQL

    JDBC如何通過SSL方式連接MySQL

    文章介紹了如何配置MySQL以支持SSL連接,并通過JDBC進行安全連接,主要內(nèi)容包括查看MySQL SSL支持、創(chuàng)建SSL連接用戶、配置用戶是否強制使用SSL、JDBC配置導入證書以及使用Go編寫一個簡單的HTTP文件服務器來提供SSL證書
    2025-02-02
  • Java的布爾類型基本介紹

    Java的布爾類型基本介紹

    這篇文章主要介紹了Java的布爾類型,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-10-10
  • Java日常練習題,每天進步一點點(44)

    Java日常練習題,每天進步一點點(44)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • SpringBoot+Vue中的Token續(xù)簽機制

    SpringBoot+Vue中的Token續(xù)簽機制

    本文主要介紹了SpringBoot+Vue中的Token續(xù)簽機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • Liquibase結合SpringBoot使用實現(xiàn)數(shù)據(jù)庫管理功能

    Liquibase結合SpringBoot使用實現(xiàn)數(shù)據(jù)庫管理功能

    Liquibase 是一個強大的數(shù)據(jù)庫管理工具,它幫助你通過自動化管理數(shù)據(jù)庫的變更、版本控制、和回滾,簡化了開發(fā)中的數(shù)據(jù)庫遷移工作,這篇文章主要介紹了Liquibase結合SpringBoot使用實現(xiàn)數(shù)據(jù)庫管理,需要的朋友可以參考下
    2024-12-12
  • Java使用iText生成PDF的步驟和示例

    Java使用iText生成PDF的步驟和示例

    iText 是一個用于創(chuàng)建和處理 PDF 文檔的開源 Java 庫,iText 主要用于生成 PDF 文件,可以將文本、圖像、表格、列表等內(nèi)容添加到 PDF 中,同時支持對 PDF 進行編輯、合并、分割、加密、數(shù)字簽名等操作,本文介紹了Java使用iText生成PDF的步驟和示例
    2024-10-10
  • Java流程控制語句之If選擇結構

    Java流程控制語句之If選擇結構

    今天繼續(xù)帶大家復習Java流程控制語句的相關知識,本文對If選擇結構作了非常詳細的介紹及代碼示例,對正在學習的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java中操作數(shù)組的Arrays類

    Java中操作數(shù)組的Arrays類

    大家好,本篇文章主要講的是Java中操作數(shù)組的Arrays類,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02

最新評論

榆社县| 彰化县| 进贤县| 富民县| 芦溪县| 蕲春县| 迁安市| 佛山市| 昭苏县| 静宁县| 通辽市| 鄂温| 阿尔山市| 徐闻县| 梧州市| 大悟县| 江津市| 和政县| 承德县| 石河子市| 珲春市| 翁牛特旗| 河源市| 楚雄市| 开封县| 璧山县| 姜堰市| 太保市| 盐津县| 崇仁县| 邢台市| 手游| 保康县| 辽源市| 柯坪县| 鄢陵县| 文化| 天峻县| 铜山县| 广元市| 北京市|