这里的score为什么要用volatile

来源:6-6 把普通变量升级为原子变量

WittChen

2021-08-14

老师您好,可能这个问题老师看到头都大了,我也见答疑区有很多相关的问题,但是都只是太停留与表面的回答,都没有继续深入,以及为什么会产生可见性问题,听我以下分析:
经过前一门的课程,volatile的作用:

第一、可见性每次写强制刷新到主存,读的时候使本地内存失效那么只能去主存中读,保证了可见性;

第二、解决重排序的问题,单例模式下的创建类的过程具有代表性。

思考过程:
那么这里,这个原子类是使普通变量具有原子操作,那么底层肯定是用锁去实现,具体什么锁不知道,但是从之前课程中学到的happens-before规则来看,只要是锁并且释放锁,那么肯定是可见的,前面几节中,老师有提到过,原子类是乐观锁,那么问题又到了乐观锁是怎么实现的了,除非里面的操作和普通的lock或者synchronized不一样从而导致了必须使用volatile保证可见性,那么哪里不一样呢?请老师解释一下,这里为什么要用volatile ^ ^

写回答

1回答

悟空

2021-08-14

/**
 * 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的,暂且理解为是类的规定。

0
1
WittChen
非常感谢!
2021-08-14
共1条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程