欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中synchronized關鍵字的使用和原理詳解

 更新時間:2023年09月19日 10:55:05   作者:風過無痕2018  
這篇文章主要介紹了Java中synchronized關鍵字的使用和原理詳解,JVM 是通過進入、退出 對象監(jiān)視器(Monitor)來實現(xiàn)對方法、同步塊的同步的,而對象監(jiān)視器的本質依賴于底層操作系統(tǒng)的互斥鎖實現(xiàn),需要的朋友可以參考下

實現(xiàn)原理

  • JVM 是通過進入、退出 對象監(jiān)視器(Monitor) 來實現(xiàn)對方法、同步塊的同步的,而對象監(jiān)視器的本質依賴于底層操作系統(tǒng)的 互斥鎖(Mutex Lock) 實現(xiàn)。
  • 具體實現(xiàn)是在編譯之后在同步方法調用前加入一個monitor.enter指令,在退出方法和異常處插入monitor.exit的指令。
  • 對于沒有獲取到鎖的線程將會阻塞到方法入口處,直到獲取鎖的線程monitor.exit之后才能嘗試繼續(xù)獲取鎖。

有三種使用方式:

  • 修飾同步代碼塊,其作用的范圍是大括號{}括起來的代碼,作用的對象是調用這個代碼塊的對象。
  • 修飾普通方法,即同步方法,其作用的范圍是整個方法,作用的對象是調用這個方法的對象。
  • 修飾靜態(tài)方法,其作用的范圍是整個靜態(tài)方法,作用的對象是這個類的所有對象。

synchronized修飾同步代碼塊

在這里插入圖片描述

在這里插入圖片描述

在同步代碼塊的入口和出口分別有monitorenter和monitorexit指令。當執(zhí)行monitorenter指令時,線程試圖獲取鎖也就是獲取monitor(monitor對象存在于每個Java對象的對象頭中,synchronized鎖便是通過這種方式獲取鎖的) 兩個monitorexit確保發(fā)生異常時也能釋放鎖

synchronized修飾普通方法

在synchronized修飾普通方法時是添加ACC_SYNCHRONIZED標識,該標識指明了該方法是一個同步方法,JVM通過該ACC_SYNCHRONIZED訪問標志來辨別一個方法是否聲明為同步方法,從而執(zhí)行相應的同步調用。

在這里插入圖片描述

synchronized修飾靜態(tài)方法

訪問標識為ACC_STATIC , ACC_SYNCHRONIZED

在這里插入圖片描述

到此這篇關于Java中synchronized關鍵字的使用和原理詳解的文章就介紹到這了,更多相關synchronized的使用和原理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot如何優(yōu)雅的實現(xiàn)重試功能

    SpringBoot如何優(yōu)雅的實現(xiàn)重試功能

    這篇文章主要詳細介紹了SpringBoot如何優(yōu)雅的實現(xiàn)重試功能的步驟詳解,文中有詳細的代碼示例,具有一定的參考價值,感興趣的同學可以借鑒閱讀
    2023-06-06
  • RabbitMQ 避免消息重復消費的方法

    RabbitMQ 避免消息重復消費的方法

    消費者端實現(xiàn)冪等性,意味著消息永遠不會消費多次,即使收到了多條一樣的消息,這篇文章給大家分享RabbitMQ 避免消息重復消費的方法,感興趣的朋友一起看看吧
    2024-03-03
  • ArrayList底層操作機制源碼解析

    ArrayList底層操作機制源碼解析

    這篇文章主要介紹了ArrayList底層操作機制源碼解析,當創(chuàng)建ArrayList對象時,如果使用的是無參構造器,則初始elementData容量為0,第1次添加,則擴容elementData為10,如需要再次擴容,則擴容elementData為1.5倍,需要的朋友可以參考下
    2023-09-09
  • java8 如何實現(xiàn)分組計算數量和計算總數

    java8 如何實現(xiàn)分組計算數量和計算總數

    這篇文章主要介紹了java8 如何實現(xiàn)分組計算數量和計算總數的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實現(xiàn)蘿卜勇者游戲的示例代碼

    Java實現(xiàn)蘿卜勇者游戲的示例代碼

    《蘿卜勇者》是由國內玩家自制的一款獨立游戲,玩家扮演蘿卜勇士闖關,打敗各種邪惡的敵人,獲得最后的勝利。本文將利用Java實現(xiàn)這一游戲,感興趣的可以了解一下
    2022-02-02
  • 解決IDEA顯示非法字符 \ufeff 的問題

    解決IDEA顯示非法字符 \ufeff 的問題

    這篇文章主要介紹了解決IDEA顯示非法字符 \ufeff 的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • java web實現(xiàn)自動登錄

    java web實現(xiàn)自動登錄

    這篇文章主要為大家詳細介紹了java web實現(xiàn)自動登錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Springboot整合WebSocket實戰(zhàn)教程

    Springboot整合WebSocket實戰(zhàn)教程

    WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據,這篇文章主要介紹了Springboot整合WebSocket實戰(zhàn)教程,需要的朋友可以參考下
    2023-05-05
  • java8異步調用如何使用才是最好的方式

    java8異步調用如何使用才是最好的方式

    異步調用主要用于當前程序的執(zhí)行不用等待調用方法執(zhí)行結束就可以繼續(xù)執(zhí)行,下面這篇文章主要給大家介紹了關于java8異步調用如何使用才是最好的方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • Java?Spring框架的注解式開發(fā)你了解嗎

    Java?Spring框架的注解式開發(fā)你了解嗎

    這篇文章主要為大家詳細介紹了Spring框架的注解式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論