1.volatile 主要是 其 "可见性",在java内存模型中,变量都是放在主内存中,每条线程里面有自己的工作内存,当一个变量被volatile 修饰时候,其他的线程会得到该变量的最新值。但是volatile并不能保证该变量的原子性。
2.在什么时候用volatile?指令重排序优化,普通的变量仅仅保证在该方法的执行过程中所有依赖赋值的结果的地方都能获得正确结果,而不能保证变量赋值的顺序与程序代码中的执行顺序一致。也就是java内存模型描述的"线程内表现为串行的语义"。
3.volatile 和锁的比较。volatile 的性能优于锁(使用synchronizde或者java.util.concurrent包),总开销低于锁(读的性能)。