JUC包中的分而治之策略-为提高性能而生( 五 )
在JDK8中新增了一个LongAdder类 , 其采用分而治之的策略来减少同一个变量的并发竞争度LongAdder的核心思想是把一个原子变量分解为多个变量 , 让同样多的线程去竞争多个资源 , 这样竞争每个资源的线程数就被分担了下来 , 下面通过图形来理解下两者设计的不同之处:如上图AtomicLong是多个线程同时竞争同一个原子变量 。
如上图LongAdder内部维护多个Cell变量 , 在同等并发量的情况下 , 争夺单个变量更新操作的线程量会减少 , 这是变相的减少了争夺共享资源的并发量 。
下面我们首先看下Cell的结构:
LongAdder维护了一个延迟初始化的原子性更新数组(默认情况下Cell数组是null)和一个基值变量base , 由于Cells占用内存是相对比较大的 , 所以一开始并不创建 , 而是在需要时候在创建 , 也就是惰性 创建 。
当一开始判断cell数组是null并且并发线程较少时候所有的累加操作都是对base变量进行的 , 这时候就退化为了AtomicLong 。 cell数组的大小保持是2的N次方大小 , 初始化时候Cell数组的中Cell的元素个数为2 , 数组里面的变量实体是Cell类型 。
推荐阅读
- 热血传奇|热血传奇:当年心中的巅峰,随便一件无比骄傲
- 手办|原神:“肝帝”再现!玩家花30天自制胡桃手办,手中的护摩亮了
- edg战队|EDG夺冠可谓是小说中的梦幻剧情,先破RNG再废GEN.G,豪虐DK夺冠
- 亚运会|LOL入选亚运会正赛,你心中的阵容怎么选?
- 孙权|三国杀:背景帝!武将皮肤中的最强客串王,孙十万果然名不虚传
- 夏侯惇|王者荣耀之中的“最强坦克”, 夏侯惇和程咬金你更喜欢谁?
- 穿越火线|轻松上手,赶超雷神:盘点CF中那些神枪中的天之骄子
- 明日之后|消逝的光芒2设计师:明日之后打造了我心目中的人尸大决战
- 老玩家|天龙网游:天龙游戏中的神奇玩法,没有经历过别说自己是老玩家
- 魔兽世界|魔兽世界玩家未解之谜,王者荣耀中的死亡骑士,得到授权了吗?