黑马程序员技术交流社区

标题: 分享一道多线程综合集合存入不重复元素的习题 [打印本页]

作者: 水月灬清影    时间: 2016-8-28 18:33
标题: 分享一道多线程综合集合存入不重复元素的习题
本帖最后由 水月灬清影 于 2016-8-29 15:35 编辑

也是论坛里见的题目,不论是不是考试题,我是做了,题目如下:
某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
        并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
        编号为: 2 的员工从后门入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
        编号为: 1 的员工从后门入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
        //.....
        从后门入场的员工总共: 13 位员工
        从前门入场的员工总共: 87 位员工
代码如下:
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.Random;

public class LuckyBalls {
        public static void main(String[] args) {
                MyThread my=new MyThread();
                Thread t1=new Thread(my,"前门");
                Thread t2=new Thread(my,"后门");
                t1.start();
                t2.start();
               
        }
}


public class MyThread implements Runnable{
        private int person=100;
        private Object obj=new Object();
        private int front=0;
        private int back=0;
        public void run() {
                while(true){
                        synchronized(obj){
                                //由于多次用到线程名称,特设置一个变量表示
                                String name=Thread.currentThread().getName();
                                if(person>0){
                                        //Set集合更为简单,本例只是为了练习用contains()判断List集合是否含重复元素
                                        ArrayList<String> list=new ArrayList<String>();
                                        //注意用list.size()作为循环结束条件
                                        for(int x=0;list.size()<7;x++){
                                                Random r=new Random();
                                                int num=r.nextInt(99)+1;
                                               
                                                //转成字符串,对10以下数补零!
                                                String s="";
                                                if(num<10){
                                                        s="0"+String.valueOf(num);
                                                }else{
                                                        s=String.valueOf(num);
                                                }
                                               
                                                //contains()方法是去重的关键
                                                if(!list.contains(s)){
                                                        list.add(s);
                                                }
                                        }
                                        //计数
                                        if(name.equals("前门")){
                                                front++;
                                        }else{
                                                back++;
                                        }
                                        //直接输出list集合即可满足所要求的格式,不必转成数组
                                        System.out.println("编号为:"+(person--)+"的员工从"+name+"入场! 拿到的双色球彩票号码是:"+list);
                                       
                                        try {
                                                Thread.sleep(100);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                       
                                }else{
                                        //输出前后门总数   并    跳出循环以结束线程运行
                                        if(name.equals("前门")){
                                                System.out.println(name+"共计"+front+"人");break;
                                        }else{
                                                System.out.println(name+"共计"+back+"人");break;
                                        }
                                       
                                }
                        }
                }
               
        }       
}






作者: xiguapi    时间: 2016-8-28 19:13
看着屌屌的~~~
作者: 悠悠呦呦    时间: 2016-8-28 19:47
  还没学   感觉挺有用的  谢谢啦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2