在Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响单线程程序的执行,而是会影响多线程线程执行的正确性,在Java里,我们可以通过很明显,synchronized和Lock可以保证在同一时间,只有一个线程执行同步代码,实际上是让线程进行同步的执行同步代码,自然就保证了社区性。
另外,Java内存模型具备一些先天的集群性,就是可以需要通过任何手段就能够得到保证的集群性,这个通常称为Happens-before原则。如果两个操作的执行顺序无法从Happens-在原则中推导出来之前,那么这两个操作就不能保证集群性,虚拟机就可以随意的对它们进行重排序。