这里的score为什么要用volatile
来源:6-6 把普通变量升级为原子变量

WittChen
2021-08-14
老师您好,可能这个问题老师看到头都大了,我也见答疑区有很多相关的问题,但是都只是太停留与表面的回答,都没有继续深入,以及为什么会产生可见性问题,听我以下分析:
经过前一门的课程,volatile的作用:
第一、可见性每次写强制刷新到主存,读的时候使本地内存失效那么只能去主存中读,保证了可见性;
第二、解决重排序的问题,单例模式下的创建类的过程具有代表性。
思考过程:
那么这里,这个原子类是使普通变量具有原子操作,那么底层肯定是用锁去实现,具体什么锁不知道,但是从之前课程中学到的happens-before规则来看,只要是锁并且释放锁,那么肯定是可见的,前面几节中,老师有提到过,原子类是乐观锁,那么问题又到了乐观锁是怎么实现的了,除非里面的操作和普通的lock或者synchronized不一样从而导致了必须使用volatile保证可见性,那么哪里不一样呢?请老师解释一下,这里为什么要用volatile ^ ^
写回答
1回答
-
/** * A reflection-based utility that enables atomic updates to * designated {@code volatile int} fields of designated classes. * This class is designed for use in atomic data structures in which * several fields of the same node are independently subject to atomic * updates.
这是
AtomicIntegerFieldUpdater
类的描述。里面的set方法调用了
U.putIntVolatile
,也要求是volatile的,暂且理解为是类的规定。
012021-08-14
相似问题
volatile使用场景
回答 1
7-2
回答 1