前言
本文主要给大家介绍了关于JDK8新增的原子性操作类LongAdder的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:个人所得税助手最新版下载-个人所得税助手官方版3.21.22 安卓手机版
LongAdder简单介绍
LongAdder类似于AtomicLong是原子性递增或者递减类,AtomicLong已经通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说性能已经很好了,但是JDK开发组并不满足,因为在非常高的并发请求下AtomicLong的性能不能让他们接受,虽然AtomicLong使用CAS但是CAS失败后还是通过无限循环的自旋锁不断尝试的

在高并发下N多线程同时去操作一个变量会造成大量线程CAS失败然后处于自旋状态,这大大浪费了cpu资源,降低了并发性。那么既然AtomicLong性能由于过多线程同时去竞争一个变量的更新而降低的,那么如果把一个变量分解为多个变量,让同样多的线程去竞争多个资源那么性能问题不就解决了?是的,JDK8提供的LongAdder就是这个思路。下面通过图形来标示两者不同。

如图AtomicLong是多个线程同时竞争同一个变量。

如图LongAdder则是内部维护多个变量,每个变量初始化都0,在同等并发量的情况下,争夺单个变量的线程量会减少这是变相的减少了争夺共享资源的并发量,另外多个线程在争夺同一个原子变量时候如果失败并不是自旋CAS重试,而是尝试获取其他原子变量的锁,最后获取当前值时候是把所有变量的值累加后返回的。
LongAdder维护了一个延迟初始化的原子性更新数组和一个基值变量base.数组的大小保持是2的N次方大小,数组表的下标使用每个线程的hashcode值的掩码表示,数组里面的变量实体是Cell类型,Cell类型是AtomicLong的一个改进,用来减少缓存的争用,对于大多数原子操作字节填充是浪费的,因为原子性操作都是无规律的分散在内存中进行的,多个原子性操作彼此之间是没有接触的,但是原子性数组元素彼此相邻存放将能经常共享缓存行,所以这在性能上是一个提升。
另外由于Cells占用内存是相对比较大的,所以一开始并不创建,而是在需要时候在创建,也就是惰性加载,当一开始没有空间时候,所有的更新都是操作base变量,
自旋锁cellsBusy用来初始化和扩容数组表使用,这里没有必要用阻塞锁,当一次线程发现当前下标的元素获取锁失败后,会尝试获取其他下表的元素的锁。更详细的说明敬请期待Java并发编程基础之并发包源码剖析一书的出版

JDK8中新增原子性操作类LongAdder,LongAdder类是LongAccumulator的一个特例,LongAccumulator提供了比LongAdder更强大的功能,只需要构造LongAccumulator时候传入自定义双面运算器就OK,后者则内置累加的规则。
乐鱼号可以卖 乐鱼赞助的英超 九州娱乐体育 造物法则九游版 在哪买蓝彩展开

水球影院可投屏版下载-水球影院TV版1.0 最新版
一寸相思手游下载-一寸相思安卓版1.0 官方版
吃掉内存疯狂版app下载-以毒攻毒吃掉内存5.2.5安卓版
极品总裁游戏下载-极品总裁手游1.0.1 安卓手机版
悦美家app-悦美家(家具直销)1.1 安卓版
豆腐女孩我爱躲猫猫游戏下载-豆腐女孩我爱躲猫猫(Hide and Seek)1.0.23 最新版
圣物英雄余额抵扣免支付版下载-圣物英雄随机0.1折余额抵充版1.0.1 gm商城版
呱呱水印app下载-呱呱水印手机版1.0安卓高清版
信长之野望15大志汉化补丁下载-信长之野望15大志内核汉化补丁免费版
啃书星球app2.0.7 手机版
1919掌上门店官方下载-1919掌上门店最新版6.5.7 安卓版
3k游戏风色世界1.4.0 安卓版
战鹰雄风折扣版2.1.6 安卓版
刀剑少女2gm科技刷充版下载-刀剑少女2(GM刷充工具)变态版1.0 送万元真充版
九牧i7智能马桶app-九牧智能马桶app1.0 官方中文版
Horae手机版下载-Horae时间管理软件1.0.0最新版
友谊的小船说翻就翻图片生成器网页版-朋友圈友谊的小船说翻就翻图片生成器电脑版1.0 在线免费友谊pc版
猕猴桃科技app下载-猕猴桃科技平台1.0.4 安卓正式版
迷你校园医院手游app-迷你校园医院app1.4 中文最新版
合肥论坛苹果版4.1.0 最新ios版