1

如标题所示 - 在 Java 中的单线程编程上下文中是否存在 volatile 有用的情况?我知道它用于确保始终在内存中实际检查变量的值,所以在任何情况下,该值可能会以应用程序/编译器不会注意到的方式更改(在单线程应用程序中)?

4

2 回答 2

5

不,至少不是您自己在单线程应用程序中定义的变量。

关键字保证与该volatile变量的多次读取发生之前的关系,这仅在多个线程访问它时才有意义。

其他见解在这里

于 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 回答