JVM 底层是通过一个叫做“内存屏障”的东西来完成。内存屏障,也叫做内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制。
所以能禁止指令重排序,即volatile能在一定程度上保证有序性。
一定程度理解如下:
语句1和语句2的顺序不保证;
语句4和语句5的顺序不保证;
但是无论怎么重排,语句3前面的不被允许排到语句3后面
x = 2; //语句1
y = 0; //语句2
flag = true; //语句3 flag是被volatile修饰的
x = 4; //语句4
y = -1; //语句5
参考如下
volatile禁止指令重排-实际应用?