当前位置: 首页 > news >正文

Java 多线程抢红包

问题需求

     一个人在群里发了1个100元的红包,被分成了8个,群里有10个人一起来抢红包,有抢到的金额随机分配。

红包功能需要满足哪些具体规则呢?

1、被分的人数抢到的金额之和要等于红包金额,不能多也不能少。

2、每个人至少抢到1元。

3、要保证红包拆分的金额尽可能分布均衡,不要出现两极分化太严重的情况。

使用线程的同步,红包100元就是资源共享!! 

public class TestRedPacket {public static void main(String[] args) {//用户名List<String> list = Arrays.asList("张三", "刘芳", "李飞", "王芳", "陈风", "方涛", "房名", "王霞", "安利", "田园");//5个线程for (int i = 0; i < 10; i++) {MyThread1 my = new MyThread1(list.get(i));//启动my.start();}}
}class MyThread1 extends Thread {private static int money = 100;  //总金额private static int count = 8;   //个数public MyThread1(String name) {super(name);}@Overridepublic void run() {//同步synchronized (MyThread1.class) {int prize = 0;if (count == 0) {System.out.println(getName() + "- 没抢到!");} else { //最后一个if (count == 1) {prize = money;} else { //随机Random r = new Random();//随机范围:[1,m/n×2-1]//二倍均值法int bounds = (money / count) * 2 - 1;prize = r.nextInt(bounds) + 1;}money -= prize;count--;System.out.println(getName() + "- 抢到【" + prize + "】元!");}}}
}

http://www.lryc.cn/news/351202.html

相关文章:

  • 【PB案例学习笔记】-08 控件拖动实现
  • 读书笔记整理
  • uniapp蓝牙打印图片
  • Ajax用法总结(包括原生Ajax、Jquery、Axois)
  • LeetCode 题解:112. 路径总和,递归,JavaScript,详细注释
  • Spring (15)Spring Boot的自动配置是如何工作的
  • 【机器学习】—机器学习和NLP预训练模型探索之旅
  • 54. UE5 RPG 增加伤害类型
  • llama3 微调教程之 llama factory 的 安装部署与模型微调过程,模型量化和gguf转换。
  • C++三剑客之std::any(二) : 源码剖析
  • 【C语言】8.C语言操作符详解(2)
  • vivado 物理约束KEEP_HIERARCHY
  • Linux 三十六章
  • ntsd用法+安装包
  • Nacos 微服务管理
  • Kubernetes集群上的Etcd备份和恢复
  • 创建型模式 (Python版)
  • ​​​【收录 Hello 算法】9.4 小结
  • MYSQL数据库基础语法
  • R实验 参数检验(二)
  • 【Linux】进程信号及相关函数/系统调用的简单认识与使用
  • Spring (14)什么是Spring Boot
  • 区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测
  • Java集合框架全景解读:从源码到实践精通指南
  • Python | Leetcode Python题解之第107题二叉树的层序遍历II
  • H4vdo 台湾APT-27视频投放工具
  • 数据结构(树)
  • HTML静态网页成品作业(HTML+CSS)——川西旅游介绍网页(2个页面)
  • MySQL数据库单表查询中查询条件的写法
  • SQL靶场搭建