Java 內存模型 (JMM) 定義了線程與主內存交互的規範,是理解並發編程的基石。本節系統講解線程內存結構、八大原子操作、原子性/可見性/有序性三大特性及同步機制。

JMM 定義八種原子操作,完成副本拷貝與同步:
| 操作 | 作用對象 | 說明 |
|---|---|---|
lock | 主內存變量 | 標記變量為線程獨占 |
unlock | 主內存變量 | 釋放獨占狀態 |
read | 主內存變量 | 將變量值從主內存傳輸到工作內存,供 load 使用 |
load | 工作內存變量 | 將 read 獲得的值放入工作內存副本 |
use | 工作內存變量 | 將工作內存值傳遞給執行引擎(字節碼指令使用) |
assign | 工作內存變量 | 執行引擎賦值給工作內存變量 |
store | 工作內存變量 | 將工作內存值傳送到主內存,供 write 使用 |
write | 主內存變量 | 將 store 獲得的值寫入主內存變量 |
規則:read→load 必須成對出現(主→工作),store→write 必須成對出現(工作→主),不可單獨出現。
操作不可分割,CPU 不會中途暫停調度。JMM 保證基本類型讀寫(除 long/double)原子,synchronized、Lock、原子類可擴展原子性範圍。
一線程修改共享變量,其他線程立即可見。依賴主內存作為傳遞媒介:寫線程 store/write 刷新主內存,讀線程 read/load 獲取最新值。volatile、synchronized、final 保證可見性。
volatile 禁止指令重排,synchronized 鎖內串行化,實現有序性。
volatile int i; i++ 非原子)。JMM 通過主/工作內存抽象、八大操作規範、三大特性定義,構建了 Java 並發的理論基石。volatile/synchronized/final 是開發者操控 JMM 行為的核心工具,選型原則:能用 volatile 不用 synchronized,能用 final 不用 volatile,能用線程局部/不可變對象不需同步。