JUC包中的分而治之策略-为提高性能而生( 九 )
多线程下使用单个Random实例生成随机数时候 , 多个线程同时计算随机数计算新的种子时候多个线程会竞争同一个原子变量的更新操作 , 由于原子变量的更新是CAS操作 , 同时只有一个线程会成功 , 那么CAS操作失败的大量线程进行自旋重试 , 而大量线程的自旋重试是会降低并发性能和消耗CPU资源的 , 为了解决这个问题 , ThreadLocalRandom类应运而生 。
如上代码(10)调用ThreadLocalRandom.current()来获取当前线程的随机数生成器 。 下面来分析下ThreadLocalRandom的实现原理 。
从名字看会让我们联想到ThreadLocal类 。 ThreadLocal通过让每一个线程拷贝一份变量 , 每个线程对变量进行操作时候实际是操作自己本地内存里面的拷贝 , 从而避免了对共享变量进行同步 。 实际上ThreadLocalRandom的实现也是这个原理 。 Random的缺点是多个线程会使用原子性种子变量 , 会导致对原子变量更新的竞争 , 这个原理可以通过下面图来表达:
推荐阅读
- 热血传奇|热血传奇:当年心中的巅峰,随便一件无比骄傲
- 手办|原神:“肝帝”再现!玩家花30天自制胡桃手办,手中的护摩亮了
- edg战队|EDG夺冠可谓是小说中的梦幻剧情,先破RNG再废GEN.G,豪虐DK夺冠
- 亚运会|LOL入选亚运会正赛,你心中的阵容怎么选?
- 孙权|三国杀:背景帝!武将皮肤中的最强客串王,孙十万果然名不虚传
- 夏侯惇|王者荣耀之中的“最强坦克”, 夏侯惇和程咬金你更喜欢谁?
- 穿越火线|轻松上手,赶超雷神:盘点CF中那些神枪中的天之骄子
- 明日之后|消逝的光芒2设计师:明日之后打造了我心目中的人尸大决战
- 老玩家|天龙网游:天龙游戏中的神奇玩法,没有经历过别说自己是老玩家
- 魔兽世界|魔兽世界玩家未解之谜,王者荣耀中的死亡骑士,得到授权了吗?