按比例随机发奖
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();}