请用Java多线程模拟自动路灯控制系统:

请用Java多线程模拟自动路灯控制系统,要求如下:1)东西方向为主干道,除在以下情况下,东西方向一直保持绿灯,南北方向一直保持红灯。2)南北方向等待通行的车辆到达5辆或以... 请用Java多线程模拟自动路灯控制系统,要求如下:
1)东西方向为主干道,除在以下情况下,东西方向一直保持绿灯,南北方向一直保持红灯。
2)南北方向等待通行的车辆到达5辆或以上时,南北方向为绿灯,东西方向转为红灯。通行结束后,恢复原状。
3)南北方向等待通行的车辆,等待时间超过2分钟时,南北方向为绿灯,东西方向转为红灯。通行结束后,恢复原状。
4)为避免通行混乱,灯的颜色必须保持15秒以上才能进行转换。(如果遇到与以上情况冲突,以本条优先)
5)假设有一个感应器,能随时探测到各路面等待通行的车辆的数量。
展开
 我来答
霸篮峦g
2010-12-08 · TA获得超过342个赞
知道答主
回答量:92
采纳率:0%
帮助的人:50.6万
展开全部
/*小弟,会的只有这些,基本的功能吧!我信相还有很多地方还要改进,但我的能力只能去这里了,要等大侠位完善它了!*/

class A implements Runnable { //A为北
private Crossing crossing = null ;
public A(Crossing crossing){
this.crossing = crossing ;
}

public void run(){
int j = 0 ;
for(int i = 0 ; i < 5 ; i++){
j++ ;
this.crossing.ACset("车辆从A到B,第 " + j + "号车辆") ;
}
}
}
class B implements Runnable { //B为南
private Crossing crossing = null ;
public B(Crossing crossing){
this.crossing = crossing ;
}

public void run(){
for(int i = 0 ; i < 5 ; i++){
this.crossing.BDget() ;
}
}
}
class C implements Runnable { //C为西
private Crossing crossing = null ;
public C(Crossing crossing){
this.crossing = crossing ;
}

public void run(){
int j = 0 ;
for(int i = 0 ; i < 5 ; i++){
j++ ;
this.crossing.ACset("车辆从C到D,第 " + j + "号车辆") ;
}
}
}
class D implements Runnable { //D为东
private Crossing crossing = null ;
public D(Crossing crossing){
this.crossing = crossing ;
}

public void run(){
for(int i = 0 ; i < 5 ; i++){
this.crossing.BDget() ;
}
}
}

public class Crossing { //为路口
private String car = "车辆从A到B" ;
private boolean flag = false ; //默认是false
/*
*1、flag = true,表示绿灯,可以A往B;
*2、flag = false,表示红灯,可以C往D;
**/
public void setCar(String car){
this.car = car ;
}
public String getCar(){
return car ;
}

public synchronized void ACset(String car){ //A 和 C去的去的方向
if(flag == false){
try {
Thread.sleep(20000) ; //红绿灯的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
this.setCar(car) ;
}
this.flag = true ;
if(flag){
this.setCar(car) ;
} else {
try {
Thread.sleep(20000) ; //红绿灯的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.flag = false ;
}

public synchronized void BDget(){ //B 和 D得到的车辆
if(flag){
System.out.println(this.getCar()) ;
}
this.flag = false ;
if(flag = false){
System.out.println(this.getCar()) ;
}
this.flag = true ;
}

public static void main(String[] args) {
Crossing crossing = new Crossing() ;
A a = new A(crossing) ;
B b = new B(crossing) ;
C c = new C(crossing) ;
D d = new D(crossing) ;
new Thread(a).start() ;
new Thread(b).start() ;
new Thread(c).start() ;
new Thread(d).start() ;
}
}
奇峰
2024-06-11 广告
好不好,谁更好这个问题是见仁见智的。这个需要顾客根据自身的情况,去选择合适自己的公司。更多详情建议可以咨询一下广州奇峰机电设备有限公司!广州奇峰机电设备有限公司主要为客户提供专业的可编程控制器产品,公司拥有专业的团队以及丰富的经验,更多详情... 点击进入详情页
本回答由奇峰提供
wl54653520
2010-12-08 · 超过14用户采纳过TA的回答
知道答主
回答量:110
采纳率:0%
帮助的人:45.3万
展开全部
你要干什么,不明白什么意思,是要源码吗,那你的分给的也太少了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
法基0I1
2010-12-07 · TA获得超过136个赞
知道小有建树答主
回答量:390
采纳率:0%
帮助的人:180万
展开全部
这个问题真的问得好啊,没想到学了Java,这么久还能有这样的模拟效果啊~~~ 学习了~~回去研究
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wei96333
2010-12-07
知道答主
回答量:40
采纳率:0%
帮助的人:33.6万
展开全部
张孝祥讲过这个类似的问题,但是我也没有源码.可以再找一找资料
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式