在多线程环境下,由于编译器优化,cpu乱序执行的情况,可能会发生指令重排序的情况。
这种情况在单线程的情况下是无害的,因为它不改变程序最终的结果。
但在多线程的情况下,它会导致数据不一致或者其它不可预料的情况。
package atomic;
public class ReorderExample {
private static boolean initDone;
private static int number;
public static void main(String[] args) throws InterruptedException {
Thread initalizer=new Thread(()->{
number=43;
initDone=true;
});
Thread worker=new Thread(()->{
while (!initDone){
try {
Thread.sleep(3_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("number="+number);
});
initalizer.start();
worker.start();
initalizer.join();
worker.join();
}
}