如标题所示 - 在 Java 中的单线程编程上下文中是否存在 volatile 有用的情况?我知道它用于确保始终在内存中实际检查变量的值,所以在任何情况下,该值可能会以应用程序/编译器不会注意到的方式更改(在单线程应用程序中)?
问问题
382 次
2 回答
5
于 2016-02-04T11:35:46.797 回答
1
从问题中描述的角度来看,它没有用,但它会影响代码执行:
Happens-before 语义限制了程序指令的重新排序。通常如果你有
private int a;
private int b;
private boolean ready;
void calc(int x, int z) {
a = x + 5;
b = z - 3;
ready = true;
}
允许 JIT 编译器以任何顺序执行方法指令(出于性能原因)。
但是如果你添加 volatile 关键字:private volatile boolean ready
,那么它保证前两个操作将被执行之前true
将被分配给ready
变量。这仍然非常无用,但从技术上讲是有区别的。
于 2016-02-04T11:49:54.067 回答