欢迎使用CSDN-markdown编辑器
来源:互联网 发布:长春知远画室在哪 编辑:程序博客网 时间:2024/06/03 14:58
小案例——公司年会双色球抽奖
某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,
* 假设公司有100个员工,利用多线程模拟年会入场过程,
并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
//…..
从后门入场的员工总共: 13 位员工
从前门入场的员工总共: 87 位员工:
public static void main(String[] args){ //用来装红色球 List<Integer> redList=new ArrayList<Integer>(); //用来装蓝色球 List<Integer> blueList=new ArrayList<Integer>(); //33个红色球 for (int i = 1; i <=33; i++) { redList.add(i); } //16个蓝色球 for (int i = 1; i <=16; i++) { blueList.add(i); } DoorThread frontDoor=new DoorThread("前门",redList, blueList); DoorThread backDoor=new DoorThread("后门",redList, blueList); frontDoor.start(); backDoor.start();}
DoorThread.java:
public class DoorThread extends Thread{ private List<Integer> redList; private List<Integer> blueList; private List<Integer> list=new ArrayList<Integer>(); Random r=new Random(); Lock lock=new ReentrantLock(); private static Integer number=0; private int count=0; public DoorThread(String name,List<Integer> redList, List<Integer> blueList) { super(name); this.redList = redList; this.blueList = blueList; } //编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07] public void run(){ while (true) { //synchronized (this) { lock.lock(); //取红色球 Collections.shuffle(redList); lock.unlock(); //lock.lock(); for (int i = 0; i < 5; i++) { list.add(redList.get(i)); } //lock.unlock(); Collections.sort(list); //lock.unlock(); lock.lock(); //取蓝色球 list.add(blueList.get(r.nextInt(16))); if (number<100) { synchronized (number) { count++; System.out.println("编号为: "+(++number) +" 的员工从 "+Thread.currentThread().getName()+" 入场!" +"拿到的双色球号码是: "+list); list.clear(); } }else { System.out.println("一共有:"+count+" 人从 "+Thread.currentThread().getName()+" 入场!"); break; } lock.unlock(); //} } }}
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 基于UDP拥塞控制-LEDBAT
- jdbc访问数据库无痕操作
- ansible远程命令
- Windows基础
- VMware Ubuntu安装详细过程2
- 欢迎使用CSDN-markdown编辑器
- Java之BitSet
- 习题6.5
- Java中如何让bigdecimal不用科学计数法 显示(51Nod 1873 初中的算术)
- leetcode: 33. Search in Rotated Sorted Array
- lower_bound upper_bound 【 二分函数的使用】
- Java实验(1)
- 动态规划之四
- Enumeration与Iterator迭代器的比较分析学习记录