在java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。
不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成,线程对其他共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写。
可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到。
volatile仅仅保证对单个volatile变量的读/写具有原子性,对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性,