Java 抽奖逻辑代码和线程池测试
前言
权重 每个奖品独有的权重
概率 (当前奖品的权重)/(所有奖品的权重) 最后一个用 1 - (前面的奖品概率之和) 这个计算出来会有误差,不过没关系展示给前端看的
一、使用步骤
1.奖品类实体 Award
代码如下(示例):
/**
奖品的其他类型数据
*/
@ApiModelProperty("奖品的其他类型数据 例如 名称")
private String awardName;
/**
概率权重 保留四位小数
*/
@ApiModelProperty("概率权重 保留四位小数")
private BigDecimal probabilityWeight;
/**
中奖概率 保留六位小数
*/
@ApiModelProperty("中奖概率 保留六位小数")
private BigDecimal winningProbability;
2.抽奖测试方法
代码如下(示例):
//记录数据中奖数据
List<String> awardDate = new ArrayList<>();
//计数
AtomicInteger count = new AtomicInteger(0);
/**
* 盲盒抽奖
* 10W次 测试区间准确度
*/
@Test
public void boxLuckDraw(){
//开启多线程
ExecutorService executorService = Executors.newFixedThreadPool(12);
for (int i = 0; i < 100000; i++) {
//执行10w次抽奖
executorService.submit(() -> test2((s) -> awardDate.add(s)))