---------------------------------------- JavaEE+云物联、期待与您交流!---------------------------------------------
/**
*1,交通灯系统三要素:交通灯,交通灯控制器,路。
*2,交通灯控制12调路线,四条主路线,四条跟随路线,四条自由路线。
*3,交通灯控制器,设置初始灯,并控制交通灯的切换动作。
*4,路拥有存储车辆和根据交通灯信号放行车辆的功能。
*/
import java.util.*;
import java.util.concurrent.*;
public class Traffic
{
public static void main(String[] args)
{
String[] directions =
{"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();
}
}
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;
}
}
class LampController
{
private Lamp currentLamp;
public LampController()
{
currentLamp = Lamp.S2N;
currentLamp.light();
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run()
{
currentLamp = currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS
);
}
}
class Road
{
private List<String> vehicles = 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++)
{
try
{
Thread.sleep((new Random().nextInt(10)+1)*1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
vehicles.add(Road.this.name+"_"+i);
}
}
});
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run()
{
if(vehicles.size()>0)
{
boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
if(lighted)
System.out.println(vehicles.remove(0)+" is traversing !");
}
}
},
1,
1,
TimeUnit.SECONDS
);
}
}
---------------------------------------- JavaEE+云物联、期待与您交流!---------------------------------------------