1.volatile
能夠保證線程的可見性
,當一個線程在修改我們主內存中的共享變量
的數據時候,能夠對另外一個線程可見。
注意: volatile 關鍵字是不能夠保證原子性。
特性:保證可見性、防止重排序、不能保證原子性。”
2.如何停止線程
1代碼
結果:
1s後沒有停止,因爲 FLAG不可見
改進:
增加volatile
3.多線程不可見
因爲我們Cpu直接操作我們主內存數據的時候( 共享的全局變量,)整個效率是非常低,所以在這時候就產生了三級緩存。
L11213
相當手在每個cpu中都有自己獨立高速緩存,在高速緩存中主要存放主內存中共享變量中的副本數據。
注意:每個cpu中副本數據相互之間是可見的,而且是相互不影響。
Cpu在這個時候直接訪問我們副本數據,肯定比訪問主內存數據效率要高。
4.什麼主內存
主內存中實際存放就是我們共享變量的數據_堆大方法區
5.什麼工作內存
指的其實就是我們主內存共享變量數據的副本。
程獨佔狀態
(2) unlock
(解鎖): 作用於主內存
的變量,把一一個處於鎖定狀態的變量釋放出來,釋放後的變量纔可以被其他線程鎖定
(3) read
(讀取): 作用於主內存
的變量,把一個變量值從主內存傳輸到線程的工作內存
中,以便隨後的load動作使用
(4) load
(載入): 作用於工作內存的變量
,它把read操作
從主內存
中得到的變量值放
入工作內存的變量副本
中
(5) use(使用):作用於工作內存的變量,把工作內存中的一一個變量值傳遞給執行引擎
(6) assign(賦值):作用於工作內存的變量,它把一一 個從執行引擎接收到的值賦給.工作內存的變量
(7) store(存儲): 作用於工作內存的變量,把工作內存中的一個變量的值傳送到主內存中,以便隨後的write的操作
(8) write
(寫入):作用於。工作內存的變量
,它把store 操作從工作內存中的-一個變量的值傳送
到主內存的變量
中
MESI協議
1.M修改(Modified)這行數據有效,數據被修改了,和主內存中的數據不- -致,數據
在於本Cache中。
2.E獨享、互斥(Exclusive)這行數據有效,數據和主內存中的數據一致,數據只存在
Cache中。
3.S共享(Shared)這行數據有效,數據和主內存中的數據一-致, 數據存在於很多Cach
4.I無效(Invalid) 這行數據無效。
E:獨享
:當只有一個cpu線程
的情況下,cpu副本數據與主內存數據如果
保持一致的情況 下,則該cpu狀態爲E狀態獨享。
S:
共享:在多個cpu線程
的情況了下,每個
cpu副本
之間數據
如果保持一致
的情況下,則當前cpu狀態爲S
M:
如果當前cpu副本
數據如果與主內存
中的數據不一致
的情況下,則當前cpu狀態
爲M
I:總線嗅探機制變爲無效多個cpu之間副本數據不一致性
總線:
維護解決cpu高速緩存副本數據之間-一致性問題。