package com.test03;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Observer;
import java.util.Queue;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Road implements Observer {
private String name;// 路名
private Queue<String> vehicles = new LinkedList<String>();// 车辆集合
private Timer timer2 = null;
public Road(Lamp lamp) {
lamp.addObserver(this);// 注册一个观察者
this.name = lamp.getName();
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.schedule(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
vehicles.offer("" + i);
}
}
}, 0, TimeUnit.SECONDS);
}
@Override
public void update(Observable o, Object arg) {
if (arg == Boolean.TRUE) {// 绿灯亮了
System.out.println(name + "方向已经开始放行车辆通过!");
timer2 = new Timer();
timer2.schedule(new TimerTask() {
@Override
public void run() {
if (vehicles.size() > 0) {
String current = vehicles.poll();
System.out.println(Road.this.name + "路的当前第" + current + "号正在通过路口!");
}
}
}, 1000, 1000);
} else {// 红灯亮了
timer2.cancel();
System.out.println(name + "方向已停止车辆通行!");
}
}
}
用观察者模式和非观察者模式设计一个交通信号灯调度系统
需积分: 14 81 浏览量
2018-09-03
10:28:49
上传
评论
收藏 6KB ZIP 举报
HoukHan
- 粉丝: 21
- 资源: 2