java抽奖活动概率算法 如何用代码实现真正公平的抽奖?

[更新]
·
·
分类:互联网
4677 阅读

java抽奖活动概率算法

如何用代码实现真正公平的抽奖?

如何用代码实现真正公平的抽奖?

先来看一个简单的实现:先将50个人进行1到50编号,然后来一段简单的java随机数代码,如下:
上图中的代码运行结果:
大家觉得这个抽奖设计的公平么?欢迎下方留言讨论~
这里介绍一下Random及ThreadLocalRandom相关知识:
int random ().nextInt(50) 1在java中最直接、简单的调用生成随机数方式:
new Random().nextInt()
比如生成0.0到10.0之间的双精度浮点数即:
new Random().nextDouble(10)如果想生成整数即:
new Random().nextInt(10)
Random每次使用都得实例化一个对象
多线程下使用单个Random实例生成随机数时候,多个线程同时计算随机数计算新的种子时候多个线程会竞争同一个原子变量的更新操作,由于原子变量的更新是CAS操作,同时只有一个线程会成功,所以会造成大量线程进行自旋重试,这是会降低并发性能的,所以ThreadLocalRandom应运而生。
为了解决多线程高并发下Random的缺陷,JUC包下新增了ThreadLocalRandom类,如果每个线程维护自己的一个种子变量,每个线程生成随机数时候根据自己老的种子计算新的种子,并使用新种子更新老的种子,然后根据新种子计算随机数,就不会存在竞争问题,这会大大提高并发性能。
日常开发中,经常会有生成一批随机数的需求,比如订单号的后4位采用随机数,随机轮询,随机获取系统默认头像等,大家可以在高并发的场景中尝试一下并发包中的ThreadLocalRandom,感兴趣的同学可以去看看相关源码。
少琮持续关注科技领域问答,欢迎大家下方留言讨论,共同成长!感谢点赞、收藏、关注~

计算机二级考试的题目是从未来教育套题里抽的吗?

不是从未来教育题库里抽的。  未来教育等考试软件是根据历年二级考试出现的题目,并且增加相应知识点整理而成的题库软件。它们存在的意义是让考生熟悉考试题目,不至于手慌脚乱。但是,题库软件不仅仅只有未来教育一家。  而且,据考生反应,未来教育题库出错率太高了。  还有,做题的时候有时候题库软件会出现错误判分的现象,以及不按照标准步骤操作无法获得分数的情况。