与标题一样 - 在Java中单线程编程的上下文中,volatile是否有用?我知道它用于确保变量的值总是在内存中进行实际检查,因此在任何情况下,该值可能会以app /编译器赢得的方式更改(在单线程应用程序中)&#39 ;注意?
答案 0 :(得分:5)
答案 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
变量之前执行前两个操作。这仍然没用,但从技术上讲,存在差异。