2.1非可见性
如果主内存里有个静态变量flag=false,然后线程A和B在工作内存都需要操作flag,线程A是while(!false){},而线程B将flag改为true,但是由于线程A和线程B之间工作内存互相不可见,线程A就会陷入死循环。
2.2指令重排导致非有序性
为了优化性能,有时会改变程序中语句的先后顺序,这样就有可能多次运行出的结果不一致。
2.3非原子性
一个完整的操作在执行过程中不被中断,称之为原子性,但是由于线程切换如下:
按照这个流程下去,最终count的值实际可能是1,我们后面可以加锁来控制它。