若变量被volatile修饰,当在对该变量进行修改时,JVM会多执行一个lock操作,该操作是对寄存器的值加0,主要作用是将本线程(CPU)的Cache写入主内存,并引起其他线程的cache的无效,相当于对Cashe的变量做了一次store和write操作(参见JVM主内存与工作内存的8种交互方式以及相应的8种约束),从而导致volatile的可见性。synchronized的原子性是利用了JVM内存交互的lock和unlock及其对应约束条件来做到的
2016-11-28