JUC包中的分而治之策略-为提高性能而生( 八 )
然后根据新的种子和bound变量通过一定的算法来计算新的随机数 。
下面看下next()代码:
-
代码(6)使用原子变量的get方法获取当前原子变量种子的值
-
代码(7)根据具体的算法使用当前种子值计算新的种子
-
代码(8)使用CAS操作 , 使用新的种子去更新老的种子 , 多线程下可能多个线程都同时执行到了代码(6)那么可能多个线程都拿到的当前种子的值是同一个 , 然后执行步骤(7)计算的新种子也都是一样的 , 但是步骤(8)的CAS操作会保证只有一个线程可以更新老的种子为新的 , 失败的线程会通过循环从新获取更新后的种子作为当前种子去计算老的种子这就保证了随机数的随机性 。
-
代码(9)则使用固定算法根据新的种子计算随机数 , 并返回 。
3.2 ThreadLocalRandom
Random类生成随机数原理以及不足:每个Random实例里面有一个原子性的种子变量用来记录当前的种子的值 , 当要生成新的随机数时候要根据当前种子计算新的种子并更新回原子变量 。
推荐阅读
- 热血传奇|热血传奇:当年心中的巅峰,随便一件无比骄傲
- 手办|原神:“肝帝”再现!玩家花30天自制胡桃手办,手中的护摩亮了
- edg战队|EDG夺冠可谓是小说中的梦幻剧情,先破RNG再废GEN.G,豪虐DK夺冠
- 亚运会|LOL入选亚运会正赛,你心中的阵容怎么选?
- 孙权|三国杀:背景帝!武将皮肤中的最强客串王,孙十万果然名不虚传
- 夏侯惇|王者荣耀之中的“最强坦克”, 夏侯惇和程咬金你更喜欢谁?
- 穿越火线|轻松上手,赶超雷神:盘点CF中那些神枪中的天之骄子
- 明日之后|消逝的光芒2设计师:明日之后打造了我心目中的人尸大决战
- 老玩家|天龙网游:天龙游戏中的神奇玩法,没有经历过别说自己是老玩家
- 魔兽世界|魔兽世界玩家未解之谜,王者荣耀中的死亡骑士,得到授权了吗?