java模拟交通信号灯_java 多线程交通信号灯模拟过程详解

这篇博客介绍了如何使用Java进行交通信号灯的多线程模拟设计。通过创建不同线程来控制四个信号灯组的交替工作,实现了绿灯的转换。每个信号灯组由三个灯组成,分别为左转、直行和右转,右转灯常亮,其他灯红绿交替。博主详细阐述了设计思路和代码实现,包括light、lamp和Mypanel等关键类,并提供了实验结果和多线程正确性测试。
摘要由CSDN通过智能技术生成

这学期我们java课程的课程设计项目----交通信号灯的线程设计

实验目的:多线程设计,同步机制

题意 设计一个交通信号灯类:

变量:位置、颜色(红、黄、绿)、显示时间(秒)。

方法:切换信号灯。

创建并启动两个线程(东西向、南北向)同时运行。

实验要求

设计线程。

设计路口信号灯示意图界面。

进一步将每个方向的信号灯分成3种车道灯:左转、直行和右转。

根据车流量进行时间的模糊控制。

在课程设计的开始并没有仔细看老师的要求,只知道是交通信号灯。然后就开始各种找资料,百度,网上大量的关于红绿灯的设计都是参考张孝祥老师的教程,大概的设计方法是创建了三个类 lamp、road、lampcontrol。

然鹅......对.....然鹅又来了,在查了大概两天资料后,我又反过来看了一遍老师发的设计要求.....这这这.....,光控制灯就行了啊,不要车的啊,捂脸...

所以设计思路马上就变得清晰,根据张老师的做法,每个路口都有三个灯,分别为左转、直行、右转,所以一共有12盏灯。按照要求,右转灯为常亮灯,左转和直行灯才有红绿交替。在除去右转灯的八个灯里面,又可以分为四组可以两两匹配的灯,分别为东西左转南北(平行转垂直)、南北直行(垂直通行)、南北左转东西(垂直转平行)、东西直行(平行通行)。

于是我给这个12个灯编了个号:

ac3dce693b86dbce75372b97589a5f06.png

emmm 大概就是这样,但是跟生活中的红绿灯不同,生活中的都是看对面路口的灯,我们这里是模拟嘛....就各个路口用各个路口的灯呗.....

大致解释一下,

1号灯为由南向西的左转灯,2号灯为由南向北的直行灯,3号灯为由南向东的右转灯。

4号灯为由东向北的右转灯,5号灯为由东向西的直行灯,6号灯为由东向南的左转灯。

7号灯为由北向西的右转灯,8号灯为由北向南的直行灯,9号灯为由北向东的左转灯。

10号灯为由西向北的左转灯,11号灯为由西向东的直行灯,12号灯为由西向南的右转灯。

然后根据匹配的原则,大概就是这么一张图:

7a600c5d5c16c0664a0fb5f747510e2e.png

我们就可以得到:

这四组信号灯。

到这里我们思路就很清晰了,我们可以分别为每一组信号灯开一个进程,然后使四个进程循环交替进行就实现了绿灯的转换。使用了程的同步技术。

当然,我们都已经开了四个进程了,为了锦上添花,我当然不介意再加个小车了hhhhhh

实验结果图:

ddbe4def14e3ac5f9cff687631f5beb0.png

源代码:

light类:

package traffic;

public class light {

int x,y; //灯在画布上的位置

boolean status; //灯的状态

public light(int x,int y,boolean islight) {

this.x=x;

this.y=y;

this.status=islight;

}

public void setlight(boolean sta) { //对外接口更改灯的状态

this.status=sta;

}

}

lamp类:

package traffic;

public class lamp implements Runnable {

light opposite, now; //相互匹配的两个灯

int greentime; //绿灯亮的时间

int name; //编组

boolean status; //状态

static Object lock = new Object();

public lamp(light l0, light l2,int gt, boolean st, int name) {

now = l0;

opposite = l2;

status = st;

greentime = gt;

this.name = name;

lightstatues();

}

public void change() {

this.status = !(this.status);

lightstatues();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值