AtomicIntegerFieldUpdater

2019-09-17 15:51:58 浏览数 (3)

对于这种需求通常有几种解决方式,

1.使用同步锁synchronized volatile,

2.使用可重入锁lock volatile

3.使用cas volatile

下面我们使用cas volatile来进行说明,并配合反例

下面我们来看下反列

对于volatile变量,写的时候会将线程本地内存的数据刷新到主内存上,读的时候会将主内存的数据加载到本地内存里,所以可以保证可见行和单个读/写操作的原子性。但是上例中先 1. 判断!ischanged 2.ischanged=true 该组合操作就不能保证原子性了,也就是说线程A A1->A2 线程B B1->B2(第一个操作为volatile读或者第二个操作为volatile写的时候,编译器不会对两个语句重排序,所以最后的执行顺序满足顺序一致性模型的),但是最后的执行结果可能是A1->B1->A2->B2

0 人点赞