在Java中的单线程应用程序中,volatile是否有用?

时间:2016-02-04 11:32:44

标签: java multithreading volatile single-threaded

与标题一样 - 在Java中单线程编程的上下文中,volatile是否有用?我知道它用于确保变量的值总是在内存中进行实际检查,因此在任何情况下,该值可能会以app /编译器赢得的方式更改(在单线程应用程序中)&#39 ;注意?

2 个答案:

答案 0 :(得分:5)

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

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

其他见解here

答案 1 :(得分:1)

从问题中描述的角度来看,它没有用,但它会影响代码执行:

发生 - 在语义之前对程序指令重新排序进行限制。通常如果你有

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变量之前执行前两个操作。这仍然没用,但从技术上讲,存在差异。