抽奖 并发处理 您所在的位置:网站首页 java实现抽奖功能高并发 抽奖 并发处理

抽奖 并发处理

#抽奖 并发处理| 来源: 网络整理| 查看: 265

抽奖问题 有奖品A 2个,有奖品B 100个,如何保证1000个人可以完全发出去呢?

解决方式1 先把奖品安置到随机数上 [0,1000),[0,1] 存放 奖品A ,[2,101] 存放 奖品B,当有用户抽奖时,给用户职随机数[0, 1000),中奖结果如下: 随机数落在 0与1,且A奖品大于0,中奖 A,否则不中奖; 随机数落在 [2, 101],且B奖品大于0,中奖 B,否则不中奖; 随机数落在 [102, 1000 ) 都不中奖。

问题:用户中奖的概率是102/1000,但是来了1000个用户真的可以抽完所有的奖品嘛? 答案:不一定

方式1临时补救发完奖品 实时判断奖品数跟抽奖人数,当剩余奖品个数与剩余抽奖人数相等时,此时随机发放还有剩余的奖品 A 或 奖品B ,进而保证这样可以完成发放。

方式1的优缺点 方式1抽奖逻辑虽然完美的完成了抽奖任务,但是如果高并发的时候就有问题了,可能会多发奖品。

还有更好的解决方式?有,如下解决方式2 解决方式2 在 方案1的思路改进如下: 既然想指定人数1000个把奖品抽完,则提前把中奖的随机数拟定好。 具体如下: 1、奖品A与奖品B 共有102个,提前给每个奖品随机一个[0, 1000) 不重复的数字,则生成一个可中奖的随机数池子。 2、提前给1000个用户生成随机数,相当于把 [0, 1000) 这个集合变成无序的队列 3、来一个用户,取无序队列的队首,然后将队首出队,拿到随机数,去抽奖池做判断,中奖则提示用户,且给记录相关的中奖信息。

优点:完美的解决了并发问题,且不会因为并发问题多发奖品,使得在用户抽奖的时候不做大量判断计算,效率与交互表现的都非常好  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有