亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中synchronized關(guān)鍵字的使用和原理詳解

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

實(shí)現(xiàn)原理

  • JVM 是通過(guò)進(jìn)入、退出 對(duì)象監(jiān)視器(Monitor) 來(lái)實(shí)現(xiàn)對(duì)方法、同步塊的同步的,而對(duì)象監(jiān)視器的本質(zhì)依賴(lài)于底層操作系統(tǒng)的 互斥鎖(Mutex Lock) 實(shí)現(xiàn)。
  • 具體實(shí)現(xiàn)是在編譯之后在同步方法調(diào)用前加入一個(gè)monitor.enter指令,在退出方法和異常處插入monitor.exit的指令。
  • 對(duì)于沒(méi)有獲取到鎖的線(xiàn)程將會(huì)阻塞到方法入口處,直到獲取鎖的線(xiàn)程monitor.exit之后才能?chē)L試?yán)^續(xù)獲取鎖。

有三種使用方式:

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

synchronized修飾同步代碼塊

在這里插入圖片描述

在這里插入圖片描述

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

synchronized修飾普通方法

在synchronized修飾普通方法時(shí)是添加ACC_SYNCHRONIZED標(biāo)識(shí),該標(biāo)識(shí)指明了該方法是一個(gè)同步方法,JVM通過(guò)該ACC_SYNCHRONIZED訪(fǎng)問(wèn)標(biāo)志來(lái)辨別一個(gè)方法是否聲明為同步方法,從而執(zhí)行相應(yīng)的同步調(diào)用。

在這里插入圖片描述

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

訪(fǎng)問(wèn)標(biāo)識(shí)為ACC_STATIC , ACC_SYNCHRONIZED

在這里插入圖片描述

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

相關(guān)文章

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

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

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

    RabbitMQ 避免消息重復(fù)消費(fèi)的方法

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

    ArrayList底層操作機(jī)制源碼解析

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

    java8 如何實(shí)現(xiàn)分組計(jì)算數(shù)量和計(jì)算總數(shù)

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

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

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

    解決IDEA顯示非法字符 \ufeff 的問(wèn)題

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

    java web實(shí)現(xiàn)自動(dòng)登錄

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

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

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

    java8異步調(diào)用如何使用才是最好的方式

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

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

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

最新評(píng)論