class MonitorExample {
int a = 0;
public synchronized void writer() { a++; } // 1→2→3
public synchronized void reader() { int i = a; } // 4→5→6
}
happens-before 鏈路:

含義:線程 A 釋放鎖前對共享變量的修改,線程 B 獲取同一鎖後立即可見。


本質:線程 A 通過主內存向線程 B 發送消息(共享變量修改)。
tryAcquire 首先 讀 volatile statetryRelease 最後 寫 volatile statecompareAndSetState (CAS) —— 同時具備 volatile 讀和寫語義CAS 前後不能重排序任何內存操作(結合 volatile 讀後不重排、寫前不重排規則)。
OpenJDK x86 實現:lock cmpxchg 指令
LOCK_IF_MP(mp) cmpxchg dword ptr [edx], ecx
lock 前綴三大效果:
第 2、3 點完美實現 volatile 讀+寫語義。
| 模式 | 寫端 | 讀端 |
|---|---|---|
| volatile 寫-讀 | volatile write | volatile read |
| volatile 寫-CAS | volatile write | CAS update |
| CAS-CAS | CAS update | CAS update |
| CAS-讀 | CAS update | volatile read |
volatile
AQS、非阻塞數據結構、原子變量類均遵循此模式,高層組件依賴基礎類構建。