首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

AtomicIntegerArray源码解析

AtomicInteger原子类是保障Integer的高并发的原子性的,那么AtomicAIntegerArray就是Integer类型数组的高并发原子性质的数组。那么如何做到数组的原子性的?因为AtomicInteger是采用的线程可见的volatile,那么采用volatile来修饰数组是否可行?显然不能这么干,我们在操作数据的时候一定是作用于数据元上,而不能作用整个数组中,当然作用于整个数组时,我们也无法保障当前线程获取到数组并将下标移动到目标地址的时候,其他的线程是否也同样移动到了目标地址。再操作的瞬间是否有其他的线程已经修改值,那么最终的解决方案就是要不断的获取整个数组并移动到目标地址,再使用CAS进行不断判断,如果数组特别长,那么volatile关键字的意义已经不那么大了。其损耗效率会比CAS自旋的还大。那么如何让减少这种无效的损耗?可以减少数组下标移动的消耗,也就是将volatile的可见性定义到数组的元素中去,而不是数组上。我们在多数组元素进行操作之前,首先将地址移动到目标数组的地址上,然后通过CAS去轮询而不是每次都从头开始。AtomicIntegerArray就是采用的这种策略。

02
领券