请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

atomicInteger 多线程读取的情况是怎样的

这个类在增加的时候看明白了,但多个线程读取的时候内存是怎么样的?是也拷贝了一份到各自线程栈中吗。如何保证看到的值是对的。

正在回答 回答被采纳积分+3

1回答

Jimin 2018-09-05 00:33:15

你好,他底层是通过cas无锁自旋的方式来保证的,cas本身是通过cpu一条指令来保证原子性更新

0 回复 有任何疑惑可以回复我~
  • 提问者 melanch_0001 #1
    那多个线程读取的时候呢?是分别拷贝一份副本到自己的栈里然后进行cas操作,还是说这个东西会放在类似于volatile那种的在一块公有的内存中呢。
    回复 有任何疑惑可以回复我~ 2018-09-05 12:40:19
  • Jimin 回复 提问者 melanch_0001 #2
    读取的时候都是读线程工作内存里的,主内存的一个副本,因此有可能出现线程不安全问题,就像课程演示的例子里那样,因此有些场景做更新时要通过加锁等来保证原子性的进行更新。
    单纯的读不去做更新还好,本身就取的当前状态,这里的线程安全性主要体现在拿到一个当前值的副本,在更新之前被其他线程修改了,而当前并不知道,导致把一个过期的值处理完后进行更新,因此一般保证这种读和之后更新原子操作,避免其他线程在这两步中间执行更新。
    回复 有任何疑惑可以回复我~ 2018-09-05 12:48:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信