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

来源:3-1 线程安全性-原子性-atomic-1

melanch_0001

2018-09-05

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

写回答

1回答

Jimin

2018-09-05

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

0
2
Jimin
回复
melanch_0001
读取的时候都是读线程工作内存里的,主内存的一个副本,因此有可能出现线程不安全问题,就像课程演示的例子里那样,因此有些场景做更新时要通过加锁等来保证原子性的进行更新。 单纯的读不去做更新还好,本身就取的当前状态,这里的线程安全性主要体现在拿到一个当前值的副本,在更新之前被其他线程修改了,而当前并不知道,导致把一个过期的值处理完后进行更新,因此一般保证这种读和之后更新原子操作,避免其他线程在这两步中间执行更新。
2018-09-05
共2条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程