volatile保证变量可见性和禁止指令重排序,但不保证原子性;每次读写都强制主内存操作,插入内存屏障限制重排序,适用于状态标志等简单场景。

volatile 是 Java 中用于修饰变量的关键字,它的核心作用是**保证变量的可见性**,并**禁止指令重排序**,但**不保证原子性**。它不是锁,也不能替代 synchronized 或 Lock,但在特定场景下能以更轻量的方式解决部分并发问题。
在多线程环境下,每个线程可能把变量从主内存读到自己的工作内存(如 CPU 缓存)中操作。若一个线程修改了该变量,其他线程可能看不到最新值——这就是可见性问题。
volatile 修饰的变量,每次读取都强制从主内存读,每次写入都立即刷回主内存,从而让所有线程“看到同一个最新值”。
编译器和处理器为了优化性能,可能调整语句执行顺序(只要单线程结果不变)。但这种重排序在多线程下可能引发问题。
volatile 变量的读写会插入内存屏障(Memory Barrier),限制其前后指令的重排序范围:
可见性和有序性 ≠ 原子性。例如:
立即学习“Java免费学习笔记(深入)”;
private volatile int counter = 0;这行代码实际包含三步:读 counter → 加 1 → 写回 counter。volatile 只能确保每一步的读/写操作对其他线程可见,但无法阻止两个线程同时读到相同旧值、各自加 1、再写回,最终只增加了一次。
常见且安全的用法包括:
不推荐用于计数器、累加器、依赖多个 volatile 变量协同逻辑的场景。
以上就是什么是Java中的volatile关键字_volatile在并发中的作用解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号