java - 写入 volatile 变量后会发生什么?

标签 java volatile

我想知道写入volatile变量是否会强制jvm将所有非volatile变量同步到内存中,那么例如下面的代码会发生什么:

volatile int x;
int y;

y=5; 
x=10;

x 将被写入内存,但是 y 会发生什么?它也会被写入内存吗?

最佳答案

是的,根据the Java Language Specification (third edition) -- in particular section 17.4.4的规则-- 每个看到 x 新值的线程如果试图读取它,随后也会看到 y 的新值。不读取 x 的线程不保证会受到影响。

但是请注意,JLS 的第二 版的内存模型中不存在此保证。在那里, volatile 读取和写入对非 volatile 内存访问的顺序没有影响。

关于java - 写入 volatile 变量后会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129015/

相关文章:

java - Java 中不使用笔画的虚线

java - 线程 "main"java.lang.OutOfMemoryError 中的异常,如何查找和修复?

java - Selenium Chrome驱动程序不遵守隐式等待吗?

java - Java 中的 volatile 关键字

java - 处理后续网络请求的线程是否能保证看到前一个请求期间写入的 volatile 变量的值?

java - 当我修改 BeanUtils.CopyProperties 的目标对象时,源代码被修改

java - 即使在设置 c3p0.testConnectionOnCheckout=true 后,与 MySQL 的数据库连接也会超时

C - 来自不稳定源的 fwrite()

c# - MissingFieldException 与 CodeContracts

c - 易失/修改的返回地址