重排序,存在多线程中的问题,在单线程中存在,但是不影响结果。不计较;
重排序是cpu与内存间性能优化产生的。寄存器存放值昂贵;
代码行,不存在数据依赖;即可以重排序;
a的值为1赋值操作比b赋值true慢;颠倒了顺序。就是输出a值;
public class test {
int a = 0;
boolean b = false;
public class A implements Runnable{
test a;
public A(test a){
this.a = a;
}
public void run(){
a.doFirst();
}
}
public class B implements Runnable{
test a;
public B(test a){
this.a = a;
}
public void run(){
a.doSecond();
}
}
public void doFirst(){
a = 1;
b = true;
}
public void doSecond(){
if(b){
if(a == 0)
System.out.println(a);
}
}
public static void main(String[] args) throws ParseException {
for(;;){
test a = new test();
new Thread(new test().new A(a)).start();
new Thread(new test().new B(a)).start();
}
}
}