黑马程序员技术交流社区

标题: 利用多线程模拟年会入场过程,,如何解答,求解答 [打印本页]

作者: 18211001681    时间: 2016-8-10 01:04
标题: 利用多线程模拟年会入场过程,,如何解答,求解答
2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
        并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
        编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
        编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
        //.....
        从后门入场的员工总共: 13 位员工
        从前门入场的员工总共: 87 位员工
作者: ylca    时间: 2016-8-10 09:08
多线程的知识!!!!!
作者: toukya    时间: 2016-8-10 11:59
本帖最后由 toukya 于 2016-8-10 15:23 编辑

class test15{
    public static void main(String[] args){
        test15 tt = new test15();
        tt.new Gate("前门").start();
        tt.new Gate("后门").start();
    }
    /*
     * 2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
        并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
        编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
        编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
        //.....
        从后门入场的员工总共: 13 位员工
        从前门入场的员工总共: 87 位员工
     */
    Set<Integer> set = new HashSet<Integer>();
    Random random = new Random();
    class Gate extends Thread{
        private String name;
        public Gate(String name){
            this.name = name;
            
        }
        int k=0;
        @Override
        public String toString() {
            return "Gate [name=" + name + "]";
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(set.size()!=100)
            {   
                int next;

                synchronized(set)
                {
                    if(set.size()!=100)
                    {
                        while(true)
                        {
                            next = random.nextInt(100)+1;
                            if(!set.contains(next))
                            {
                                set.add(next);
                                break;
                            }
                        }
                        employee e=new employee(next);
                        e.setList(getTicket());
                        System.out.println("编号为:"+e.getI()+"的员工从"+name+"入场!,拿到的双色球彩票号码是:"+e.getList());
                        ++k;
                    }
                }        
            }
            System.out.println("从"+name+"入场的员工总共:"+k+"位员工");
        }
        
    }
    class employee{
        private int i;//编号
        private List<Integer> list;//彩票号码
        public int getI() {
            return i;
        }
        public void setI(int i) {
            this.i = i;
        }
        public List<Integer> getList() {
            return list;
        }
        public void setList(List<Integer> list) {
            this.list = list;
        }
        public employee(int i) {
            super();
            this.i = i;
        }
    }
    private List<Integer> getTicket(){
        Set<Integer> set = new HashSet<Integer>();
        List<Integer> list = new ArrayList<Integer>();
        while(set.size()!=6)
        {
            Random random = new Random();
            set.add(random.nextInt(33)+1);
        }
        list.addAll(set);
        list.add(new Random().nextInt(16)+1);
        return list;
    }
}




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