A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
        并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
        编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
        编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
        //.....
        从后门入场的员工总共: 13 位员工
        从前门入场的员工总共: 87 位员工

2 个回复

倒序浏览
多线程的知识!!!!!
回复 使用道具 举报
本帖最后由 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;
    }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马