一、volatile关键字的作用
1、保证可见性;
2、防止指令重排;
3、但是不保证原子性;
二、可见性是什么?
在JMM(java memory model)java内存模型中,其他线程从主内存空间把值拷贝到自己的工作空间,线程修改之后的值会返回给主内存,主内存会通知其他线程,此为可见性。
三、指令重排
CPU为了执行效率会并发执行操作指令,volatile可以使指令一个一个的执行。
四、如何解决原子性问题
1、通过synchronized关键字。
2、通过使用AtomicXX,不加锁,采用CAS(compareAndSet)解决。其本质是使用UnSafe本地方法(CPU原语)。
3、使用LongAdder:最快(在线程多的情况下,使用分段锁)