先看代码
public class HappenBefore {
private static int a=0;
private static boolean flag=false;
public static void main(String[] args) throws InterruptedException {
Thread t1=new Thread(()->{
a=1;
flag=true;
});
Thread t2=new Thread(()->{
if(flag){
a*=1;
}
//指令重排
if(a==0){
System.out.println("happen before->"+a);
}
});
t1.start();
t2.start();
t1.join();
t2.join();
}
}
最后运行的结果是有时会打印出指定内容,但是我不理解的是。既然我将t1先通过join()方法合并了。逻辑上应该是a的值已经在t1中更改为了1,线程t2中就算出现指令重排也不会打印出结果的,就这里我不理解。有没有大神来帮忙扫扫盲?