黑马程序员技术交流社区

标题: 多线程课堂作业 [打印本页]

作者: 琼华掌教    时间: 2016-10-30 00:27
标题: 多线程课堂作业
教室有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;
        }
       
}




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