java記憶體模型 JMM

2021-07-11 12:49:45 字數 430 閱讀 2226

1、原子性(atomicity)

不可中斷的操作,即使是多個執行緒一起執行的時候,也不會被其他執行緒干擾

2、可見性(visibility)

當乙個執行緒修改了某乙個共享變數的值,其他執行緒是否能夠立即知道這個修改

3、有序性(ordering)

重排指令可以保證序列語義一致,但沒有義務保證多執行緒之間的語義也一致

程式順序原則:乙個執行緒內保證語義序列

volatile規則:volatile變數的寫,先發生於讀

鎖規則:解鎖必然發生於隨後的加鎖前

傳遞性:a先與b,b先於c,那麼a必然先於c

執行緒的start()先於它的每乙個動作

執行緒的所有操作先於執行緒的終結thread.join()

執行緒的中斷先於被中斷的**

物件的建構函式執行,結束先於finalize()方法

JMM記憶體模型

依賴於jvm排程作業系統,由作業系統建立乙個核心執行緒klt,核心執行緒最終才會被cpu排程 jvm結構 jmm八大原子操作 volatitle如何保證可見性?匯流排鎖 當被volatitle修飾的變數想要修改主記憶體的資料時,會傳送一條帶有lock字首的彙編指令到匯流排上,此時它會鎖住匯流排,禁止...

JMM記憶體模型

mesi快取一致性協議 多個cpu從主記憶體讀取同乙個資料到各自的快取記憶體,當其中的乙個cpu修改了快取裡的資料,該資料會馬上同步回主記憶體,其它cpu通過匯流排嗅探機制可感知到資料的變化從而將自己快取裡的資料失效 lock unlock 匯流排加lock變成序列,效率降低 store前加lock...

Java記憶體模型之從JMM角度分析DCL

dcl,即double check lock,中衛雙重檢查鎖定。其實dcl很多人在單例模式中用過,lz面試人的時候也要他們寫過,但是有很多人都會寫錯。他們為什麼會寫錯呢?其錯誤根源在 有什麼解決方案?下面就隨lz一起來分析 我們先看單例模式裡面的懶漢式 public class singleton ...