线程练习-公司年会,前门后门进出加彩票统计
参考文章:
一、 java基础之多线程的练习题 http://blog.csdn.net/u014028392/article/details/76906801
二、Vanguard http://www.cnblogs.com/guodong-wang/p/7226144.html
4、某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
//.....
从后门入场的员工总共: 13 位员工
从前门入场的员工总共: 87 位员工
解题思路:
1,双色球规则:
“双色球”彩票投注区分为红色球号码区和蓝色球号码区。
“双色球”每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1--33中选择;蓝色球号码从1--16中选择。
用一个数组装入这 6个红色球 和 1个蓝色球,球应该是随机产生
2,员工入场应该是无序的,所以1-100应该乱序进入
3,前门,后门对应两个线程,设定统计数,前门线程执行一次,统计数加一,后门也是如此
4,线程共享代码为1,2里面的内容,最后输出一个总的统计数。
package homework4;public class ThreadDemo {public static void main(String[] args) {AnnualMeeting am = new AnnualMeeting();Thread front = new Thread(am);front.setName("前门");Thread back = new Thread(am,"后门");front.start(); back.start();}
}
代码2:
package homework4;import java.util.ArrayList;
import java.util.Random;public class Lottery {private static ArrayList<Integer> intList = new ArrayList<Integer>(); // arrList用来装双色球private static ArrayList<String> strList = new ArrayList<String>(); //用来转换彩票的输出格式private static Random rand = new Random(); // 用来产生红蓝球随机数private static int[] arrRed = new int[6]; // 6个红球private static int[] arrBlue = new int[1]; // 1个蓝球public static void getLottery() {intList.clear();strList.clear();for (int i = 0; i < arrRed.length;) {arrRed[i] = rand.nextInt(32) + 1; // 使产生的随机数在【1-33】之间// 产生的随机数如果已经包含,则进行下一轮循环,如果不包含,则添加进arrList中,并使i++,直到产生6个红球为止if (intList.contains(arrRed[i])) {continue;} else {intList.add(arrRed[i]);i++;}}// 产生蓝球随机数for (int i = 0; i < arrBlue.length;) {arrBlue[i] = rand.nextInt(15) + 1; // 使产生的随机数在【1-16】之间if (intList.contains(arrBlue[i])) {continue;} else {intList.add(arrBlue[i]);i++;}}
// System.out.println(intList);//转换彩票的输出格式 ,小于10的数组,前面加0,放到strList中,大于10的自己放进去for (int i = 0; i < intList.size(); i++) {if(intList.get(i) < 10){strList.add("0"+intList.get(i));}else {strList.add(""+intList.get(i));}}System.out.print(strList);}
}
package homework4;import java.util.ArrayList;
import java.util.Random;public class AnnualMeeting implements Runnable {private int personNumber = 100; // 公司总员工数private int frontDoorCount = 0; // 统计前门进入人数private int backDoorCount = 0; // 统计后门进入人数private ArrayList<Integer> arrayList = new ArrayList<Integer>(); // 用于存储已经进入会场的员工private Random r = new Random(); //用来产生随机数private int number = 0;// 用来接收产生的随机数private Object obj = new Object(); //同步锁中的对象监视器public void run() {//不论是前门还是线程,执行起来都会进入循环,进行判断,并进行相关操作//FOR 循环用来控制进入的员工while(true) {//线程休眠一段时间,可以让两个线程抢着执行的更加均匀一点try{Thread.sleep(10);}catch(Exception ex) {}//对共享数据加上同步锁synchronized(obj){if(personNumber > 0){//产生一个【1-100】之间的随机数number = r.nextInt(100) + 1;//如果arrList包含了这个随机数,就相当于员工进入了会场,则跳过此轮循环,进入下一轮循环if (arrayList.contains(number)){continue;}else{arrayList.add(number);} if (Thread.currentThread().getName().equals("前门")){frontDoorCount++;}else {if (Thread.currentThread().getName().equals("后门"))backDoorCount++;}System.out.print("编号为:" + number + " 的员工从 " + Thread.currentThread().getName() + " 入场!" + "拿到的双色球彩票号码是:");Lottery.getLottery(); // 输出彩票结果,并进行格式控制System.out.println();//上面代码执行一次,证明是一个人已经进入会场了,故personNumber--personNumber--;}else{//else的内容,也要进行线程判断,最后加上break语句,不然前后门线程会个执行一次的if (Thread.currentThread().getName().equals("前门")) {System.out.println("从前门入场的员工总共: " + frontDoorCount + " 位员工");break;}if (Thread.currentThread().getName().equals("后门")) {System.out.println("从后门入场的员工总共: " + backDoorCount + " 位员工");break;}}} }}
}
线程练习-公司年会,前门后门进出加彩票统计相关推荐
- 公司年会到底参不参加
公司年会到底参不参加 Hello 大家好 我终于回血了! 最近事情比较多,年底终于缓过神.至于这段时间忙了什么事情我会在年前用几篇文章来介绍. 春节逼近,大多数公司都举行年会,来承上启下,包括我们也是 ...
- 第四范式裴沵思出席绿公司年会:传统企业要尽快完成在线化武装
9月28日,第13届中国绿公司年会在海口启幕.绿公司年会被认为是国内最具影响力的商业论坛,马云.王玉锁.方洪波.雷军等商界著名企业家.政界各级领导.学界权威等汇聚一堂. 今年年会包括数字化战略.新基建 ...
- Bootstrap公司年会抽奖活动代码
介绍: Bootstrap公司年会抽奖活动代码基于Bootstrap3.3.4制作,响应式设计,自适应分辨率,兼容PC端和移动端,自定义主题,有添加抽奖名单功能. 网盘下载地址: http://kek ...
- 昨天公司年会抽奖,居然抽中了特等奖
5号公司去拉斐特城堡酒店开年会,居然应验了新员工手气好的传言,中了个特等奖-29寸彩电一台,正好家里主卧的电视还没买呢,今年手气不错,买家具抽奖中了,公司年会抽奖又中了,考虑是不是该去买彩票
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...
- 【各大公司年会奖品清单】腾讯送直升飞机,网易与日女星度过美好的下午?...
近期,各大公司都在开年会,各种年会上的奇葩事件颠覆人们的"三观".去年阿里巴巴一套武林壹号的大奖言犹在耳,百度年会"度娘"火遍全国,今年各大互联网公司的年会 ...
- 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第二部分...
10套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...
- 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第一部分...
10套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...
- 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第三部分...
16套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...
最新文章
- 32岁封神!苏炳添博士重磅论文:我怎么跑这么快?
- js字符串替换_浅析Vue的生命周期以及JS异步
- 多项式相关操作学习笔记
- php7 获取文件类型,太简单了!PHP获取文件扩展名的7中方法
- Judy alpha 第七天
- 反射——类(Class)
- HTML5的设计目的是为了在移动设备上支持多媒体
- suse11 升级glibc版本
- 大数据系列 | 阿里云datav数据可视化(使用json文件生成可视化动态图标)
- 嵌入式开发(一):嵌入式开发新手入门
- 翟菜花:当防沉迷遇到职业电竞,我们能怎么办?
- 最常见的Web网站攻击手段
- 红米手机html文件,红米手机中ES文件浏览器无法删除SD卡中文件的解决办法-es文件浏览器...
- Python趣味|为了追到小姐姐,我用 Python 制作了一个机器人
- githubPC端下载地址
- python对象模型_python 实现对象模型
- 均方误差损失函数(MSE,mean squared error)
- 为什么我放弃近千万期权离开贝壳找房?
- 解决VBS使用记事本编译,执行时,中文汉字乱码的问题
- Linux IIO驱动
热门文章
- unsafe java_浅析 Unsafe 的使用
- python写彩票预测软件_python入门教程NO.6 用python做个简单的彩票号码统计分析工具...
- 树莓派连接显示器,显示器一直没有反应怎么办?
- OSChina 周一乱弹 —— 这狗像不像我女朋友
- 1,2-二苯基-1,2-二(4-苄溴基苯基)乙烯;TPE-MB结构式
- 专访宋怀明:雄厚的技术依托下,曙光致力成为行业大数据生态领航者
- ffmpeg pcm混音
- MySQL——数据库日志
- Word中一条删除不掉的单或双横线问题的解决之道
- oracle数据库创建user,Oracle数据库如何创建数据库用户呢?