本帖最后由 思维 于 2014-8-17 09:08 编辑
今天学交通灯管理系统,看到张孝祥老师的PPT里面有这么一句话:在Road对象的构造方法中启动一个定时器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除掉。
问题是:难道当前灯不是绿灯,已经进入集合的车辆就不用移除吗?实际情况是不是当前灯变为红灯时,已经进入该路线的车辆必须停下原地待命,等下次绿灯啊?
- ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
- //创建一个固定频率的定时器,
- timer.scheduleAtFixedRate(
- //执行路线中车辆通过的线程
- new Runnable(){
- public void run(){
- //假设路中存在车辆
- if(vechicles.size()>0){
- //返回当前路线灯的状态
- boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
- //假设道路上为绿灯,remove(0)表示移除首先进入该集合的车辆
- if(lighted){
- System.out.println(vechicles.remove(0)+"is traversing!");
- }
- }
- }
- },
- //初始化延时,1秒以后执行该线程
- 1,
- //两次开始执行的最小间隔时间为1秒
- 1,
- //计时单位:秒
- TimeUnit.SECONDS
- );
复制代码 |
|