volatile 是 Java 并发编程中的轻量级同步机制,它通过禁止指令重排序和保证内存可见性来解决多线程环境下的变量访问问题。以下是其核心作用的全面剖析:
一、volatile 的三大特性
| 特性 | 说明 |
|---|---|
| 可见性 | 线程对volatile变量的修改会立即刷新到主内存,并使其他线程的缓存失效 |
| 有序性 | 禁止指令重排序优化,确保代码执行顺序 |
| 非原子性 | 不保证复合操作的原子性(如i++) |
二、底层实现原理
1. 内存屏障(Memory Barrier)
// 写操作
public void write() {
volatileVar = 1; // 插入StoreStore屏障 + StoreLoad屏障
}
// 读操作
public void read() {
int tmp = volatileVar; // 插入LoadLoad屏障 + LoadStore屏障
}
2. JMM(Java内存模型)保证
- 写操作:线程写入volatile变量时,会立即将工作内存的值刷新到主内存
- 读操作:线程读取volatile变量时,会先使本地缓存失效,直接从主内存读取
三、典型应用场景
1. 状态标志位
private volatile boolean shutdownRequested;
public void shutdown() {
shutdownRequested = true; // 对所有线程立即可见
}
public void doWork() {
while (!shutdownRequested

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



