交通灯管理系统III

本文详细介绍了交通灯控制器类LampController的编写,包括注意事项、Lamp类的示例代码,以及测试类MainClass的程序编写。重点在于交通灯的定时切换逻辑,使用了ScheduledExecutorService实现。此外,还分析了系统流程,包括交通灯和车辆的模拟运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交通灯管理系统III

 交通灯控制器类程序编写

测试类程序编写

 总体分析总结

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

1.    交通灯控制器类LampController程序编写

1). 编写过程中注意事项

(1). 切换线路之间的交通灯的方法

每隔10s切换一下交通灯。

(2). 切换线路之间的交通灯的方法的简化

这个方法仅仅被使用一次之后即可,不需要被其他的方法调用。因此简化程序,就直接放入到LampController类的构造方法即可。

注意1】这个方法是可以单独拿出来的。只不过单独拿出来之后,newLampController()之后,还要单独调用这个方法才行。所以就直接简化到LampController这个类的构造方法中。

注意2】由于构造方法里面就是就是对成员属性的初始化,所以一定要对内部的表示当前是绿灯进行指定。由于是循环一直切换,所以随意指定从某个线路交通灯开始启动变亮即可

(3). LampController 类的设计规范

整个系统只能有一套交通灯控制系统,所以LampController类设计成单例模式。

(3). LampController类构造方法设计思路

[1]. 先设计成单线程的构造方法

先制定成员“当前亮绿灯的交通灯”是哪个交通灯(初始化成员对象)  ---->每隔10秒将当前灯变红,并按顺序将下一个方向的灯变绿

写成单线程程序如下:

private LampController(){
      //初始化成员变量currentLamp这个成员变量 ---- 指定第一盏亮的交通灯
      currentLamp =Lamp.S2N;
      currentLamp.light();
     
      while(true){
            try{
                  Thread.sleep(10*1000);//10s做一次切换
            }catch(InterruptedException e){
                  e.printStackTrace();
            }
            //变红一盏灯之后,就把它对应的下一盏灯变绿
            currentLamp =currentLamp.blackOut();
      }
}

[2]. 分析这个单线程程序存在的问题

主线程在实例化LampController这个类的实例的时候,由于后面是死循环,那么就会造成主线程卡在这一直在进行交通灯之间的切换。假设此时实例化LampController之后,还有别的代码要执行,那么就无法执行到了。所以为了避免主线程被卡住,这个地方应该分出来给新的线程来执行。

[3]. 单线程程序的多线程化的图示


[4]. 每隔10s的切换交通灯实现步骤

{1}. 这里仍然采用线程的新技术来替代传统技术

{1}1. 使用的类和方法

通过java.util.concurrent.Executor类的静态方法newScheduledThreadPool产生可以按照一个固定的时间来执行Runnable实现类实例的线程池的方法ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值