public class HwService {
public static Map<Integer, HwAward> awardMap = new HashMap<Integer, HwAward>();
public static Object lock = new Object(); //锁
public static int[] awardIndexs = null; //奖品索引
/**
* 重新生成奖品索引数组
*
* @return
*/
private int[] regenerateAwardIndexs() {
Set<Integer> keys = HwService.awardMap.keySet();
int seedCount = keys.size();// 当前因子个数
int[] awardIndexs = new int[seedCount];
int count = 0;
for (int j : keys) {
awardIndexs[count] = j;
count++;
}
return awardIndexs;
}
}
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
HwService service = new HwService();
Random ran = new Random();
int i = 0;
while (i < 150000) {
int seedCount = HwService.awardMap.size();// 当前种子个数
if (seedCount == 0) {
System.out.println("发光了!!!!!");
break;
}
HwAward award = HwService.awardMap.get(awardIndexs[ran
.nextInt(seedCount)]);// 根据当前因子个数随机
synchronized (lock) {
int nowLeft = award.getLeftAmount() - 1; // 当前剩余个数-1
award.setLeftAmount(nowLeft); // 更新剩余个数
if (nowLeft == 0) {
HwService.awardMap.remove(award.getAwardId()); // 从奖品列表移除
awardIndexs = service.regenerateAwardIndexs(); // 重新生成因子
System.out.println(award.getAwardBreif()
+ " 发光了!!! ID " + award.getAwardId());
System.out.println("当前奖品列表个数 "
+ HwService.awardMap.size());
}
}
i++;
}
System.out.println("当前还有 " + i + " 人未领奖");
}
};
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
Thread t3 = new Thread(r);
Thread t4 = new Thread(r);
Thread t5 = new Thread(r);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
备忘,缺点是要先确定按比例算出的总数,然后减到0的就不会出现在随机队列里面了
分享到:
相关推荐
看到了rownum的概念后,突然想到了好多业务场景应该都可以适用的,比如在进行随机发奖的时候, 我们就可以从先查一下奖品表中可以发的总奖品数,然后通过java的Random类在总奖品数内生成一个随机整数X,然后调用 ...
小学数学数学故事数学童话北游记29悟空发奖
* 规则:循环赛制,原则上按国际篮球比赛规则 * 奖励:取前三名 第二部分:个人和团体乒乓球赛 * 负责人:程光新吴发平 * 时间:11月-12月 * 要求:以个人自愿原则到各年级负责人处报名 * 规则:原则上按国际乒乓...
学校学生奖学金大作业的程序,这是自己写的,不完善之处请见谅
这是NJ的奖学金一题的代码,相信能够为很多学生(特别是中大林老师的)带来便利。
用JAVA实现彩票管理系统 机体功能体现为 : 购买彩票、发奖,兑奖
用户可以通过特定的酒精类型进行搜索,查找非酒精饮料列表或生成随机的饮料配方。 使用 Love Calculator,还会根据用户的姓名输入向用户显示兼容性百分比。 用户还可以将他们最喜欢的饮品配方保存到已保存的饮品...
颁奖 颁奖会 颁奖典礼 奖项 发奖 嘉奖 奖品 公司颁奖 PPT模板下载
拍摄新闻照片时,需要随时注意,首先找好最佳拍摄位置和角度,然后等特色场景出现时马上就按下快门,例如需要抓住领导握手、会场鼓掌、发奖接奖状、船舶靠岸、蓝球进圈、比赛开始、举酒碰杯、交换签字文本、剪彩下...
Token Generator 使用SDK访问好视通云通信平台服务需要使用Token,该项目提供生成Token的Java语言代码。 关于Token鉴权的具体细节,参考 使用方式 你应该在服务器程序中使用对应的代码生成Token,将Token下发给...
适用于给员工幸运抽奖并发奖的场所.没有抽奖人员数量的限定,没有使用次数的限定。如果需要增值开发,可以与我联系 Email: yyazygr@163.com
3实物奖,id,图片地址,剩余数量,奖品总数,中奖编码,发奖周期,发奖计划,奖品状态0正常1删除,奖品开始时间,结束时间,奖品名称)获奖表(id,奖品id,奖品名称,奖品类型,抽奖编号,用户ip,用户id,用户名...
在积分的前提下,增加发奖记录库,便于您准确统计顾客的领奖时间、次数及奖品名称并减少损失。 9.完善的数据库压缩与修复功能。在您没有专人维护的前提下,自己就可以处理日常的简单的应用问题。程序维护简单,无需...
同时高级刮刮卡可以实现由商家自行控制出奖概率,也可以由商家直接在中奖者粉丝的手机端完全整个发奖验证流程。 墨子刮刮卡抽奖系统前台截图 墨子刮刮卡抽奖系统后台截图 相关阅读 同类推荐:站长常用源码
魔众高级大转盘功能可以在公众号内...同时高级大转盘可以实现由商家自行控制出奖概率,也可以由商家直接在中奖者粉丝的手机端完全整个发奖验证流程。您可以通过微信扫描右上角二维码来体验公众号第三方平台微信应用。
同时高级刮刮卡可以实现由商家自行控制出奖概率,也可以由商家直接在中奖者粉丝的手机端完全整个发奖验证流程。操作系统:Linux/Unix 或 Windows软件环境:Laravel 5.1的运行环境Apache/Nginx , ...
1983年2月22日北京市举行1982年优秀科技成果发奖大会,我校21项科研成果荣获奖励,其中:一等奖1项(全市共5项),二等奖6项,三等奖11项,优秀论文奖3项。获奖项目有:1.紫外曝光铬版精缩机...
礼节仪式是指在特定场合举行的、具有专门程序、规范化的活动,如发奖仪式、签字仪式、开幕式等。礼貌是指人们在社会交往过程中表示出的尊重、祝颂、致意、问候、哀悼等惯用的形式和规范。仪表礼是指人的外表,如容貌...
魔众高级刮刮卡功能可以在公众号内实现刮奖活动,粉丝可以通过刮奖获得...同时高级刮刮卡可以实现由商家自行控制出奖概率,也可以由商家直接在中奖者粉丝的手机端完全整个发奖验证流程。 操作系统: Linux/Unix 或 Wi
魔众高级大转盘功能可以在公众号内实现转盘活动,粉丝可以通过幸运大转盘获得...同时高级大转盘可以实现由商家自行控制出奖概率,也可以由商家直接在中奖者粉丝的手机端完全整个发奖验证流程。 您可以通过微信扫描右