指令重排是指在程序执行过程中, 为了性能考虑, 编译器和CPU可能会对指令重新排序.
happenbefore.java
/**
* 指令重排:代码执行顺序和预期的不一样
* 目的:提高性能
*/
public class Happenbefore {
public static int i;
public static boolean flag;
public static void main(String[] args) {
for (int j = 0; j < 10; j++) {
i = 0;
flag = false;
//线程1 更改数据
Thread thread1 = new Thread(()->{
i = 1;
flag = true;
});
//线程2 读取数据
Thread thread2 = new Thread(()->{
if(flag){
i = i * 1;
}
if (i == 0){
System.out.println("i的值为:" + i);
}
});
thread1.start();
thread2.start();
}
}
}
运行结果:
i的值为:1
i的值为:0
i的值为:0