volatile的可见性
由于JVM运行的实体是线程
而每个线程创建时JVM都会为其创建工作内存
工作内存是每个线程的私有数据区域
而JAVA内存模型规定所有变量都存储在主内存
主内存是共享内存区域
所有线程都可以访问
但线程对变量的操作必须在工作内存中进行
首先要将变量从主内存拷贝到自己的工作内存空间,然后对变量操作,操作完成后再将变量写入主内存
不能直接操作主内存中的变量
各个线程的工作内存中存储主内存中的变量副本拷贝
因此不同的线程之间无法访问对方的工作内存
线程间的通信必须通过主内存来完成