采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这个类在增加的时候看明白了,但多个线程读取的时候内存是怎么样的?是也拷贝了一份到各自线程栈中吗。如何保证看到的值是对的。
你好,他底层是通过cas无锁自旋的方式来保证的,cas本身是通过cpu一条指令来保证原子性更新
那多个线程读取的时候呢?是分别拷贝一份副本到自己的栈里然后进行cas操作,还是说这个东西会放在类似于volatile那种的在一块公有的内存中呢。
读取的时候都是读线程工作内存里的,主内存的一个副本,因此有可能出现线程不安全问题,就像课程演示的例子里那样,因此有些场景做更新时要通过加锁等来保证原子性的进行更新。 单纯的读不去做更新还好,本身就取的当前状态,这里的线程安全性主要体现在拿到一个当前值的副本,在更新之前被其他线程修改了,而当前并不知道,导致把一个过期的值处理完后进行更新,因此一般保证这种读和之后更新原子操作,避免其他线程在这两步中间执行更新。
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.3k 12