多线程环境下因为编译器和cpu对指令的重排序(3种)造成了错误的多线程语义,这其实就是可见性问题和有序性问题,并发编程的三大问题:可见性,有序性,原子性。有序性问题指编译器和cpu的重排序在单线程遵守as-if-serial语义,在多线程违反了多线程语义。可见性指的是有序性问题给多线程编程带来的影响。为了限制编译器和CPU对指令的重排序,使多线程环境遵守类似单线程的as-if-serial语义,jmm诞生了