日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

从操作系统的PV操作理解JAVA的synchronized同步方法,同步代码块实现,及比较

發布時間:2024/4/18 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从操作系统的PV操作理解JAVA的synchronized同步方法,同步代码块实现,及比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

也有利于理解操作系統的同步
知識果然是息息相關的

JAVA同樣離不開操作系統的原理,不過他體現在虛擬機JVM中

synchronized關鍵字是同步關鍵字

首先我們知道在操作系統里
PV兩者操作信息量S的自增自減
P自增
V自減

現在類比知道在JVM中:
【知道JVM的本地方法棧與底層的操作系統OS息息相關

同步方法:

例:

//同步方法 public synchronized void getS(){ //do }

JVM中有一個ACC_SYNCHRONIZED標記符【在同步方法的常量池中】,類比操作系統中的信息量S

:當線程要訪問一個方法時方法,就會去檢查ACC_SYNCHRONIZED,如果本地方法棧有這個變量【此處體現操作系統對信息量ACC_SYNCHRONIZED的操作,P操作】,
就會去得到一個相關與方法的監視器鎖,在方法執行完就釋放監視器鎖【此處體現操作系統對信息量ACC_SYNCHRONIZED的操作,V操作,異常時同】
:當其他線程訪問這個方法時,會被監視器鎖阻止

監視器鎖除了正常釋放,還有該方法有異常拋出未處理時,也會釋放。

同步代碼塊(針對資源對象,一般寫this,代指本身):

例:

public void getS(){ //do //同步代碼塊 synchronized(this){ //do } }

JVM采用
monitorenter(加鎖P)、monitorexit(釋放鎖V)
兩個指令來實現同步

每個資源對象都有一個被記錄 被鎖次數 的變量(信息量),值為0時代表未上鎖

當一個線程獲取該資源對象的鎖后,計數器加一,如果同一線程多次獲取相同資源對象的鎖后,計數器都會加一【P操作】

該線程釋放鎖后,計數器會減一,當計數器減到0時,資源對象會返回到未鎖狀態【V操作】

此時別的線程就可以訪問該資源對象。

剛剛學了基礎的JVM,聽老師說了:同步代碼方法與同步代碼塊,相比同步代碼塊會更好
現在知道原因了:

同步代碼塊針對具體資源對象(遇到了的)進行鎖放
而同步方法會把相關資源對象全部鎖放

我是如此理解的,當然運用他們的時間不是絕對的

有錯望大佬指出

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的从操作系统的PV操作理解JAVA的synchronized同步方法,同步代码块实现,及比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。