多线程的三要素 原子性 所有的操作要么成功,要么失败,不能中间中止 可见性 对于共享变量,有一个线程修改了其值,其他线程也能看到,使用的也是最新的值 有序性 代码按照顺序执行(只要求最终一致性)(不影响单线程的最终一致性,但会影响多线程的一致性) { int i=0; boolean b=false; i=1; b=true; } { int i=0; i=1; boolean b=false; b=true; } 两个代码执行的结果是一样的,因此可能会重排序 Thread1--- obj=createObj(); init =true; Thread2---- while(!init){ sleep(1000); } useObj() Thread1由于指令重排,先init再createObj()时,当T和read1执行到init=true;Thread2获取到cpu执行权,while通过,调用userObj就会出现空指针异常