交通灯管理系统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实现类实例的线程池的方法ÿ