参考文章:

一、 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里面的内容,最后输出一个总的统计数。
下面为代码部分:
代码1:
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);}
}
代码3:
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;}}}     }}
}

线程练习-公司年会,前门后门进出加彩票统计相关推荐

  1. 公司年会到底参不参加

    公司年会到底参不参加 Hello 大家好 我终于回血了! 最近事情比较多,年底终于缓过神.至于这段时间忙了什么事情我会在年前用几篇文章来介绍. 春节逼近,大多数公司都举行年会,来承上启下,包括我们也是 ...

  2. 第四范式裴沵思出席绿公司年会:传统企业要尽快完成在线化武装

    9月28日,第13届中国绿公司年会在海口启幕.绿公司年会被认为是国内最具影响力的商业论坛,马云.王玉锁.方洪波.雷军等商界著名企业家.政界各级领导.学界权威等汇聚一堂. 今年年会包括数字化战略.新基建 ...

  3. Bootstrap公司年会抽奖活动代码

    介绍: Bootstrap公司年会抽奖活动代码基于Bootstrap3.3.4制作,响应式设计,自适应分辨率,兼容PC端和移动端,自定义主题,有添加抽奖名单功能. 网盘下载地址: http://kek ...

  4. 昨天公司年会抽奖,居然抽中了特等奖

    5号公司去拉斐特城堡酒店开年会,居然应验了新员工手气好的传言,中了个特等奖-29寸彩电一台,正好家里主卧的电视还没买呢,今年手气不错,买家具抽奖中了,公司年会抽奖又中了,考虑是不是该去买彩票

  5. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

  6. 【各大公司年会奖品清单】腾讯送直升飞机,网易与日女星度过美好的下午?...

      近期,各大公司都在开年会,各种年会上的奇葩事件颠覆人们的"三观".去年阿里巴巴一套武林壹号的大奖言犹在耳,百度年会"度娘"火遍全国,今年各大互联网公司的年会 ...

  7. 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第二部分...

    10套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...

  8. 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第一部分...

    10套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...

  9. 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第三部分...

    16套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...

最新文章

  1. 32岁封神!苏炳添博士重磅论文:我怎么跑这么快?
  2. js字符串替换_浅析Vue的生命周期以及JS异步
  3. 多项式相关操作学习笔记
  4. php7 获取文件类型,太简单了!PHP获取文件扩展名的7中方法
  5. Judy alpha 第七天
  6. 反射——类(Class)
  7. HTML5的设计目的是为了在移动设备上支持多媒体
  8. suse11 升级glibc版本
  9. 大数据系列 | 阿里云datav数据可视化(使用json文件生成可视化动态图标)
  10. 嵌入式开发(一):嵌入式开发新手入门
  11. 翟菜花:当防沉迷遇到职业电竞,我们能怎么办?
  12. 最常见的Web网站攻击手段
  13. 红米手机html文件,红米手机中ES文件浏览器无法删除SD卡中文件的解决办法-es文件浏览器...
  14. Python趣味|为了追到小姐姐,我用 Python 制作了一个机器人
  15. githubPC端下载地址
  16. python对象模型_python 实现对象模型
  17. 均方误差损失函数(MSE,mean squared error)
  18. 为什么我放弃近千万期权离开贝壳找房?
  19. 解决VBS使用记事本编译,执行时,中文汉字乱码的问题
  20. Linux IIO驱动

热门文章

  1. unsafe java_浅析 Unsafe 的使用
  2. python写彩票预测软件_python入门教程NO.6 用python做个简单的彩票号码统计分析工具...
  3. 树莓派连接显示器,显示器一直没有反应怎么办?
  4. OSChina 周一乱弹 —— 这狗像不像我女朋友
  5. 1,2-二苯基-1,2-二(4-苄溴基苯基)乙烯;TPE-MB结构式
  6. 专访宋怀明:雄厚的技术依托下,曙光致力成为行业大数据生态领航者
  7. ffmpeg pcm混音
  8. MySQL——数据库日志
  9. Word中一条删除不掉的单或双横线问题的解决之道
  10. oracle数据库创建user,Oracle数据库如何创建数据库用户呢?