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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱亚安 中级黑马   /  2012-3-24 01:58  /  1493 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

     刚把交通灯的视频看完,自己也顺着老师的思路写了一遍。但是最后写完就觉得好像有点小问题,是不是在每次绿灯后呢,都有车通过,等到了这个等变暗的时候,是不是会有就是这条路上的车都应该穿过了,那么在下次变绿灯的时候,穿过的车是不是应该是重新进行编号后的车辆呀,这样的话就应该出现编号为1的车了吧。但是我运行的程序没有这种情况,我也统计了一下,就是没有这种情况出现。这是为什么,我始终是没有找出原因。
    还有就是在Road类中,构造方法中直接就有线程参与进来,这个应该怎么理解,是说在new这个类的对象时候要把这个线程执行完才算真的把对象生成出来,还是说在new对象的同时来进行这个线程的运行,并且我这个线程其实和这个位置没有关系,只是在run方法中用到你的数据而已呢?
    这个线程的新技术有关的视频,现在还没有看,所以这个有点不明白,希望有人能帮忙看看。。。

1 个回复

倒序浏览
本帖最后由 崔岩 于 2012-3-24 09:00 编辑

如果运行时候某个方向重新出现编号为1的车,那就是你写错了··。我们看看车生成的代码:
public void run(){
                                for(int i=1;i<1000;i++){
                                        try {
                                                Thread.sleep((new Random().nextInt(5) + 1) * 1000);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        vechicles.add(Road.this.name + "_" + i);
                                }                               
                        }
vechicles中元素的增加是从i等于1开始循环到1000的,怎么会出现i又变回1了呢,所以车辆的编号永远是增长的不会出现又重1开始的情况。车辆的取出是:
System.out.println(vechicles.remove(0) + " is traversing !");  只是重ArrayList中移除了该元素,而每个元素的类型(即车辆编号)是字符串,这个是不会随着元素减少而改变的。 况且在这个系统中也是绝对不应该让车从1从新开始编号的,这个系统的目的之一也是统计车流量,就的一段时间内某个方向通过了多少量车,这个数据要作为交通灯时间长短的依据(你可以观察下现在路口不同方向绿灯的时间不一样的),是很重要的,所以一定要让一个方向的车按顺序排号,即使新一次的绿灯开始,车辆仍要延续以前的编号。我们做的系统必须符合业务的需求,你多往这方面想想就会少很多疑惑,毕竟实际开发项目不是我们做做demo只考虑程序里的内容,而是要结合实际问题的。
第二个问题,在构造函数中循环产生车辆,和移除车辆的工作是由线程产生的,之所以叫线程就是可以同时执行的,由CPU调配的,在构造函数调用时就已经产生对象了,不会出现停留在循环里的情况,而且里面还有sleep呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马