如何采用多进程(或多线程)技术编写一个程序模拟十字路口交通灯控制问题?

请采用多进程(或多线程)技术编写一个程序模拟十字路口交通灯控制问题

: 一个十字路口,共有四组红绿灯,每个路口的车辆都遵循“红灯停、绿灯行”

的原则,假设将每一台汽车都作为一个进程(线程),请设计良好的机制,展示出

合理的“十字路口交通管理”情况。具体要求如下: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();
    }
}
}