请采用多进程(或多线程)技术编写一个程序模拟十字路口交通灯控制问题
: 一个十字路口,共有四组红绿灯,每个路口的车辆都遵循“红灯停、绿灯行”
的原则,假设将每一台汽车都作为一个进程(线程),请设计良好的机制,展示出
合理的“十字路口交通管理”情况。具体要求如下:a、车辆数目:每个路口的车
辆数目不超过5辆,程序能够提供参数来设定初始的车辆数目;b、交通灯设定:初
始情况一个路口为红灯、一个路口为绿灯;红灯变为绿灯的间隔为3秒,必须保持
十字路口交通灯的设定正确;c、车辆通行设定:路口宽度不限,对一个路口而言
,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能继续通
过交通灯,车辆通过路口的时间可以固定、可以自行计算,但是不能大于等于3秒
(即必须体现交通灯对通行的管制)。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
用extends Thread类方式来实现多线程模拟红绿灯:
如有帮助请在回答上点个【采纳】
Lighter 红绿灯类:
package pack1;
/**
* 灯线程
* @author Administrator
*
*/
public class Lighter extends Thread{
//代表灯当前的状态(这里只考虑红绿两种状态)
public String state;
public void run(){
while (true){
try {
//初始状态设为红灯,且红灯时常为10s
state = "red";
System.out.println("lighter:现在是红灯,静止车辆通行");
Thread.sleep(10*1000);
//10s后灯变绿,设绿灯时间位5秒
state = "green";
System.out.println("lighter:现在变绿灯了,车辆可以通行了。");
Lighter.sleep(5*1000);
} catch (InterruptedException e) {
System.out.println("出错了:"+e);
}
}
}
}
Car 汽车类:
package pack1;
/**
* 车辆线程
* @author Administrator
*
*/
public class Car extends Thread{
String name="";
//灯作为私有变量,车辆根据灯的状态决定是否要停止
private Lighter lighter;
public Car(String name,Lighter l){
this.name=name;
this.lighter=l;
}
public void run(){
if (lighter.state.equals("red")){
System.out.println(this.name+":等待中");
}else{
System.out.println(this.name+":通过了红绿灯");
}
}
}
测试类:
package pack1;
/**
* 红绿灯测试代码
* @author Administrator
*
*/
public class RglightTest {
public static void main(String[] args) throws InterruptedException {
Lighter l=new Lighter();
//红绿灯开始运行
l.start();
//生成20个车辆,依次通过红绿灯
for(int i=0;i<20;i++){
Car c=new Car("car"+i+1,l);
//当前车辆睡眠1s
c.sleep(1000);
c.start();
}
}
}