1.what is volatile?
在java中为了解决线程的并发问题,引入了volatile关键字修饰符号;其作用是:在多线程情况下,保证数据同步,换句话说就是在多线程情况下,对一个volatile字段进行修改后,任何访问这个字段的线程都是读到最新的值。
2.volatile is thread safe?
虽然volatile可以保证在多线程的情况下,数据同步,但是volatile并不能保证完全的线程安全。这个需要知道volatile不是原子性,也就是说,volatile字段只能读到内存的最新字段,但并不能读到寄存器中的字段,而在寄存器中到内存这个一过程没法保证线程安全,所以volatile并不是原子性操作,也就是非原子性操作;
3.volatile 试用的场景
我们可以大致了解到,如果该操作时原子操作,即用volatile字段时适用的,如果在volatile在非原子操作的情况下时不适用的,说形象就是当如果对数据进行gei和operate是不安全的,如果只进行set或者get操作时可以保证线程安全的。