1.volatile修饰符适用于以下场景:某个属性被多个线程共享,其中有一个线程修改了此属性,其他线程可以立即得到修改后的值,比如boolean flag;或者作为触发器,实现轻量级同步。
    2.volatile属性的读写操作都是无锁的,它不能替代synchronize[因为它没有提供原子性和互斥性。因为无锁不需要花费时间在获取锁和释放锁上,所以说它是低成本的。
    3.volatile只能作用于属性,我们用volatile修饰属性,这样compilers就不会对这个属性做指令重排序。
    4.volatile 提供了可见性,任何一个线程对其的修改将立马对其他线程可见。volatile属性不会被线程缓存,始终从主存中读取。
    5.volatile提供了happens-before保证,对olatle变量v的写入happens-before所有其他线程后续对的读操作。
    6.volatile可以使得long和double的赋值是原子的。
    7.volatile可以在单例双重检查中实现可见性和禁止指令重排序,从而保证安全性。