volatile 关键字与JMM
- volatile 作用
可见性:确保线程读取变量时从主内存获取最新值
禁止指令重排序:防止编译器和CPU优化导致代码执行顺序异常
- 使用场景
class SharedResource {
private volatile boolean flag = false; // 保证多线程可见性
public void toggleFlag() {flag = !flag; // 非原子操作(volatile不保证原子性!)
}
}
3. Java内存模型(JMM)
主内存与工作内存:
线程操作变量时,需从主内存拷贝到工作内存,修改后刷回主内存
happens-before原则:
volatile写操作happens-before后续对该变量的读操作
线程启动、终止、中断等操作的顺序性约束