让我们采取以下陈述:
int d0, d1;
int[] ds = {0, 0};
现在一个线程具有以下说明:
d0++;
d1++;
而另一个线程有这个指令:
ds[1] = d1;
ds[0] = d0;
如果我们并行运行这些线程,显然有三种组合ds
可以看起来像:{0, 0}、{1, 1} 和 {1, 0}。
现在最大的问题是:也可以有 {0, 1} 吗?编译器/JVM 可以简单地交换指令,因为它认为它们不相关吗?如果是,那么这种行为的“规则”到底是什么,这取决于编译器还是 JVM?