我们说我有一个影响班级行为的静态int
。
class A{
public static int classFlag = 0;
private int myFlag = 0;
public void doSomething(){
if(myFlag != classFlag){
myFlag = classFlag:
}
/*myFlag-dependent behaviour*/
}
}
系统中只有一个线程更改classFlag
,而/*myFlag-dependent behaviour*/
并不要求所有线程立即看到对classFlag
的更新。
因此,我希望保持classFlag
非易失性,以避免引入昂贵且完全不必要的内存障碍。
我可以依赖classFlag
最终可见的更新吗?
答案 0 :(得分:0)
基于myFlag执行一段代码的读者线程将无法看到您的更新,这可能会导致 1)非常不确定的行为 2)错过更新(你永远不知道什么时候会再次调用这个:: doSomething)
我认为volatile的成本足够低,可以保证它的正确使用,而不是让代码留下这样的错误。