读书人

黑马软件工程师_交通灯管理系统

发布时间: 2013-01-28 11:49:56 作者: rapoo

黑马程序员_交通灯管理系统

?

public class Road {private List<String> vechicies = new ArrayList<String>(); //车的集合private String name = null; //路的名字public Road(String name) {this.name = name;ExecutorService pool = Executors.newSingleThreadExecutor(); //创建一个线程池pool.execute(new Runnable(){ //匿名内部类创建一个线程,开启一个线程@Overridepublic void run() {for(int i=1;i<1000;i++) {try {Thread.sleep((new Random().nextInt(10)+1) * 1000); //每隔1-10秒创建一辆车} catch (InterruptedException e) {e.printStackTrace();}vechicies.add(Road.this.name + "" + i);//将车辆加入集合中}}});ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); //创建一个定时器timer.scheduleAtFixedRate(new Runnable(){@Overridepublic void run() {if(vechicies.size()>0) { //检查路上是否有车boolean lighted = Lamp.valueOf(Road.this.name).isLighted();//取得灯的状态if(lighted) { //检查灯是否是绿灯System.out.println(vechicies.remove(0) + "is traversing !");}}}}, 1, 1, TimeUnit.SECONDS);}}

public enum Lamp {//定义12条路线相应的灯S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);private Lamp(String opposite,String next,boolean lighted){//Lamp的构造函数this.opposite = opposite;this.next = next;this.lighted = lighted;}private boolean lighted; //灯是否是亮的private String opposite;//对应线路的灯private String next;//下一个灯public boolean isLighted() {//检测灯是否点亮return lighted;}/** * 将灯变亮 */public void light() {this.lighted = true;if (opposite != null) {//将对应的灯点亮Lamp.valueOf(opposite).light();}System.out.println(name() + "lamp is green!");}/** * 将灯变黑 */public Lamp blackOut() {this.lighted = false;if (opposite != null) {//将对应的灯熄灭Lamp.valueOf(opposite).blackOut();}Lamp nextLamp = null;if(next != null) {//将下一个灯点亮nextLamp = Lamp.valueOf(next);nextLamp.light();}return nextLamp;}}

public class LampController {private Lamp currentLamp; //当前的灯public LampController() {currentLamp = Lamp.S2N;currentLamp.light();ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable(){@Overridepublic void run() {currentLamp = currentLamp.blackOut();//将当前灯熄灭,并获得下一个灯的对象}}, 10, 10, TimeUnit.SECONDS);}}

public class MainClass {/** * @param args */public static void main(String[] args) {String[] directions = new String[]{"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};for(int i=0;i<directions.length;i++) {new Road(directions[i]);}new LampController();}}

------- android培训、java培训、期待与您交流! ----------

读书人网 >编程

热点推荐