JUC包中的分而治之策略-为提高性能而生( 十 )
那么如果每个线程维护自己的一个种子变量 , 每个线程生成随机数时候根据自己本地内存中的老的种子计算新的种子 , 并使用新种子更新老的种子 , 然后根据新种子计算随机数 , 就不会存在竞争问题 , 这会大大提高并发性能 , 如下图ThreadLocalRandom原理可以使用下图表达:
Thread类里面有几个变量:
思考问题:
-
每个线程的初始种子怎么生成的
-
如果保障多个线程产生的种子不一样
四、总结
本文是对拙作 java并发编程之美 一书中有关章节的提炼 。 本次分享首先讲解了AtomicLong的内部实现 , 以及存在的缺点 , 然后讲解了 LongAdder采用分而治之的策略通过使用多个原子变量减小单个原子变量竞争的并发度 。 然后简单介绍了Random , 和其缺点 , 最后介绍了ThreadLocalRandom借用ThreadLocal的思想解决了多线程对同一个原子变量竞争锁带来的性能损耗 。 其实JUC包中还有其他一些经典的组件 , 比如fork-join框架等 。
推荐阅读
- 热血传奇|热血传奇:当年心中的巅峰,随便一件无比骄傲
- 手办|原神:“肝帝”再现!玩家花30天自制胡桃手办,手中的护摩亮了
- edg战队|EDG夺冠可谓是小说中的梦幻剧情,先破RNG再废GEN.G,豪虐DK夺冠
- 亚运会|LOL入选亚运会正赛,你心中的阵容怎么选?
- 孙权|三国杀:背景帝!武将皮肤中的最强客串王,孙十万果然名不虚传
- 夏侯惇|王者荣耀之中的“最强坦克”, 夏侯惇和程咬金你更喜欢谁?
- 穿越火线|轻松上手,赶超雷神:盘点CF中那些神枪中的天之骄子
- 明日之后|消逝的光芒2设计师:明日之后打造了我心目中的人尸大决战
- 老玩家|天龙网游:天龙游戏中的神奇玩法,没有经历过别说自己是老玩家
- 魔兽世界|魔兽世界玩家未解之谜,王者荣耀中的死亡骑士,得到授权了吗?