volatile 不能保证原子性!!!绝对不能。认为能的是对java理解很大的常见误区。
volatile 保证的是内存可见性。也可用来防止指令重排序(就是上面有人提到的内存屏障,也是happens-before的一条原则)