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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 琼华掌教 中级黑马   /  2016-10-30 00:27  /  604 人查看  /  0 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

教室有2个门口,上课时,同学陆陆续续进入教室
利用多线程,模拟这个过程,把这个过程打印出来,并且统计出每个门口进入的学生人数。
假设班里人共64个人
要求:
        可能是编号为1的同学从前门进入
        然后是编号为52的同学从后门进入
        。。。。
        也就是说,同学进入教室的顺序,并不是按照编号的顺序进入的,而是随机进入的。
       
        public static void main(String[] args) {
                MyRunnable mr = new MyRunnable();
                new Thread(mr,"前门").start();
                new Thread(mr,"后门").start();
        }
       

}


class MyRunnable implements Runnable{

        Hashtable<String, Integer> ht = new Hashtable<>();
        int flag = -1;
        public void run() {
                while(true){
                        String name = Thread.currentThread().getName();
                        int index = getUnUsedIndex();        //返回一个还没有进入班级的同学的编号
                       
                        if (index == -1) {        //如果index=-1,表明全班人都进班了
                                if (flag == 0) {
                                        System.out.println(ht);
                                        break;
                                }
                                flag = 0;
                                break;
                        }
                       
                        System.out.println("编号为:" + index + " 的同学从 " + name + " 进入了班级");
                       
                        //统计每个线程执行的次数
                        if (!ht.containsKey(name)) {
                                ht.put(name, 1);
                        }else {
                                ht.put(name, ht.get(name)+1);
                        }
                }
        }
       
       
        Random r = new Random();
        ArrayList<Integer> al = new ArrayList<>();
        //返回一个还没有进入班级的同学的编号
        private int getUnUsedIndex() {
                int index = r.nextInt(64)+1;
                while(al.contains(index) && al.size()<64){
                        index = r.nextInt(64)+1;
                }
               
                if (al.size()==64) {
                        return -1;
                }
               
                al.add(index);
               
                return index;
        }
       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马