因为java线程之间的通信由java内存模型控制,一般线程会有一个自己的本地内存,整个程序有一个主内存,jmm控制主内存与线程本地内存的交互,记得之前看有一个双重检查的加锁的单例模式,就遇到需要用volatile修饰那个单例变量,就看到指令重排,就看了一下JMM,JMM就提供一个抽象的内存模型,为线程的内存交互做控制,个人理解,欢迎指正