JVM(入門篇08)JMM Java內存模型模型. 詳解.

一、什麼是JMM?

1.定義:

JMM(Java Memory Model)Java內存模型.

2. JMM 和 JVM 的區別

  • JVM內存模型指的是 – 內存分區圖
  • JMMJava內存模型 指的是 一種**==虛擬機規範==.**

二、JMM有何用?

1. (抽象)定義了主內存和線程之間的關係:

之前在多線程安全問題的產生 的時候也涉及到了點擊跳轉

1.共享變量在主內存中 (Main Memory)

2.每個線程在本地內存(Local Memory)

3.本地內存和主內存是抽象的概念,物理上不存在,只是更多的讀寫和計算都運行在 本地內存中,所以本地內存待遇更好(優先使用高速度的寄存器和高速緩存)

在這裏插入圖片描述

2. 線程 A 和 線程 B如何通信?

必須通過主內存,線程安全問題就是通信失敗的例子.
Java 高級,多線程,線程安全產生的原因;多線程問題的代碼模擬

3. 工作內存和主內存交互的8大操作

名稱 作用內存 作用
1.Lock(鎖定) 主內存 把一個鎖住(變量標識爲一條線程獨佔狀態。)
2.Unlock(解鎖): 主內存 把變量解鎖(可繼續被其他線程鎖定了
3.Read(讀取) 主內存 讀取變量的值到工作內存,以便後的load操作
4.Load:(載入) 工作內存 read的值放到工作內存的變量副本中。
5.use(使用) 工作內存 把工作內存變量副本中的值傳遞給執行引擎進行使用**(比如計算)**,
6.assign(賦值) 工作內存 執行引擎計算後的值賦
給工作內存的變量副本中
7.store(儲存) 工作內存 工作內存的變量副本的值傳遞給主內存,和載入相反
8.write(寫入) 主內存 將store的值寫入到主內存變量中

4. 八大操作必須滿足以下規則

規則 解釋
1.順序執行 如果把一個變量從主內存複製到工作內存,就需要膽汁順序地執行store和write操作,但是沒有必須保證是連續執行
2.配對出現 不允許 read 和load,store 和 write 單一出現 lock 和 unlock 單一出現
3.沒assign不準回主內存 如果一個變量沒有經歷重工作內存中取出的到執行引擎運算,就不讓回去
4.變量從主內存中出生 一個變量只能在主內存中產生
5. 如果對一個變量執行lock操作,將會清空工作內存中此變量的值,在執行引擎使用這個變量前需要重新執行load或assign操作初始化變量的值
6. 如果一個變量事先沒有被lock操作鎖定,則不允許對它執行unlock操作;也不允許去unlock一個被其他線程鎖定的變量
7. 對一個變量執行unlock操作之前,必須先把此變量同步到主內存中(執行store和write操作)。

二、解決線程交互的安全問題.

1.synchronized關鍵字

2. volatile

更多
Java 高級,多線程,線程安全產生的原因;多線程問題的代碼模擬

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章