Java中synchronized關(guā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)重試功能
這篇文章主要詳細(xì)介紹了SpringBoot如何優(yōu)雅的實(shí)現(xiàn)重試功能的步驟詳解,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒閱讀2023-06-06java8 如何實(shí)現(xiàn)分組計(jì)算數(shù)量和計(jì)算總數(shù)
這篇文章主要介紹了java8 如何實(shí)現(xiàn)分組計(jì)算數(shù)量和計(jì)算總數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07java web實(shí)現(xiàn)自動(dòng)登錄
這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)自動(dòng)登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Springboot整合WebSocket實(shí)戰(zhàn)教程
WebSocket使得客戶(hù)端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶(hù)端推送數(shù)據(jù),這篇文章主要介紹了Springboot整合WebSocket實(shí)戰(zhàn)教程,需要的朋友可以參考下2023-05-05Java?Spring框架的注解式開(kāi)發(fā)你了解嗎
這篇文章主要為大家詳細(xì)介紹了Spring框架的注解式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03