package com.zqh.play.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; /** * Created by zqhxuyuan on 15-4-7. * * 每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。 每条路线上随机增加新的车辆,增加到一个集合中保存。 * 每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。 */ public class Road { 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++) { try { // 每1到10秒内有辆车上路 Thread.sleep((new Random().nextInt(10) + 1) * 1000); } 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); } }