---------------------- Android 培训、java 培训 、期待与您交流! ----------------------
交通灯管理系统
//Lamp
====================================================
package com.itcast.study.traffic;
public enum Lamp {
/*灯名(对应的灯名,下一个亮的灯名,初始灯光的是红还是绿)*/
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) {
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, 下面总共应该有6个方向能看到汽车穿过!");
}
/*
* 灯和对应的灯变红,下一个灯变绿
*/
public Lamp blackOut() {
this.lighted = false;
if (opposite != null) {
Lamp.valueOf(opposite).blackOut();
}
Lamp nextLamp = null;
if (next != null) {
nextLamp = Lamp.valueOf(next);
System.out.println("绿灯从" + name() + "-------->切换为" + next);
nextLamp.light();
}
return nextLamp;//返回下一个灯的名字
}
}
====================================================
//Road
====================================================
package com.itcast.study.traffic;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Road {
private List<String> vechicles = new ArrayList<String>();// 接收车的数量
private String name = null;// 定义路的名字
public Road(String name) {
this.name = name;
//
ExecutorService pool = Executors.newSingleThreadExecutor();// 创建线程
pool.execute(new Runnable() {
public void run() {
for (int i = 1; i < 1000; i++) { // 产生999辆车
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);// 让线程随机休息1秒到10秒
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);// 把车名录入数组中
}
}
});
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);// 定时器
timer.scheduleAtFixedRate(new Runnable() {
public void run() {
if (vechicles.size() > 0) {
boolean lighted = Lamp.valueOf(Road.this.name).isLighted();//灯的红绿
if (lighted) {
System.out.println(vechicles.remove(0)
+ " is traversing !");// 把第一辆车移走
}
}
}
}, 1, 1, TimeUnit.SECONDS);// 第一次过一秒通过一辆车,以后每过一秒通过一辆车
}
}
====================================================
//LampController
====================================================
package com.itcast.study.traffic;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LampController {
private Lamp currentLamp;//当前的灯
public LampController(){
//首先指定一个灯,并且让它变绿。
currentLamp = Lamp.S2N;
currentLamp.light();
/*做一个定时器,让它每过10秒让当前的灯变红,*/
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
System.out.println("来了");
currentLamp = currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
====================================================
//MainClass
====================================================
package com.itcast.study.traffic;
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
/*创建12个路*/
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 培训 、期待与您交流! ----------------------