Java多线程实现交通灯管理系统
简介
本文将介绍如何使用Java多线程来实现交通灯管理系统。在交通灯管理系统中,灯的颜色会定期切换,而不同灯的切换时间可能不同,所以使用多线程可以很好地模拟交通灯的切换过程。
实现步骤
1. 创建两个类:交通灯和路口
首先,我们需要创建两个类来表示交通灯和路口。一个交通灯可以有几种颜色(红灯、绿灯和黄灯),而一个路口可以有多个交通灯。
public class TrafficLight extends Thread {
private String color;
public TrafficLight(String color) {
this.color = color;
}
public String getColor() {
return color;
}
@Override
public void run() {
try {
while (true) {
if (color.equals("红灯")) {
Thread.sleep(3000);
color = "绿灯";
} else if (color.equals("绿灯")) {
Thread.sleep(2000);
color = "黄灯";
} else {
Thread.sleep(1000);
color = "红灯";
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Intersection {
private TrafficLight trafficLight1;
private TrafficLight trafficLight2;
public Intersection(TrafficLight trafficLight1, TrafficLight trafficLight2) {
this.trafficLight1 = trafficLight1;
this.trafficLight2 = trafficLight2;
}
public void run() {
trafficLight1.start();
trafficLight2.start();
try {
while (true) {
System.out.println(trafficLight1.getColor() + " " + trafficLight2.getColor());
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
2. 实现交通灯的颜色切换
在TrafficLight类中,我们定义了三种颜色:红灯、绿灯和黄灯。在run()方法中,我们使用无限循环来模拟交通灯的颜色不断切换的过程。当交通灯的颜色为红灯时,我们让线程休眠3秒,然后将颜色切换为绿灯;当交通灯的颜色为绿灯时,我们让线程休眠2秒,然后将颜色切换为黄灯;当交通灯的颜色为黄灯时,我们让线程休眠1秒,然后将颜色切换为红灯。
3. 实现路口的交通控制
在Intersection类中,我们创建了两个TrafficLight对象,并将它们作为参数传递给Intersection类的构造函数。然后,在run()方法中,我们启动了这两个TrafficLight对象,并使用一个无限循环来不断判断两个交通灯的颜色,并输出它们的颜色。
4. 测试
public class Test {
public static void main(String[] args) {
TrafficLight trafficLight1 = new TrafficLight("红灯");
TrafficLight trafficLight2 = new TrafficLight("绿灯");
Intersection intersection = new Intersection(trafficLight1, trafficLight2);
intersection.run();
}
}
我们创建了两个TrafficLight对象,一个红灯和一个绿灯,然后将它们作为参数传递给Intersection对象,并启动Intersection对象的run()方法。当我们运行这个程序时,就可以看到交通灯的颜色不断切换,并输出它们的颜色。
示例说明
示例1
我们可以将TrafficLight类中的颜色切换时间调整,在实际的红绿灯中,绿灯的时间通常是最长的,也就是说,红灯和黄灯的时间要比绿灯的时间短。我们可以将代码改为以下方式:
if (color.equals("红灯")) {
Thread.sleep(5000);
color = "绿灯";
} else if (color.equals("绿灯")) {
Thread.sleep(10000);
color = "黄灯";
} else {
Thread.sleep(3000);
color = "红灯";
}
示例2
我们还可以将TrafficLight类中的颜色改为枚举类型,使代码更加清晰。代码改为以下方式:
public enum Color {
RED, GREEN, YELLOW;
}
public class TrafficLight extends Thread {
private Color color;
public TrafficLight(Color color) {
this.color = color;
}
public Color getColor() {
return color;
}
@Override
public void run() {
try {
while (true) {
if (color == Color.RED) {
Thread.sleep(5000);
color = Color.GREEN;
} else if (color == Color.GREEN) {
Thread.sleep(10000);
color = Color.YELLOW;
} else {
Thread.sleep(3000);
color = Color.RED;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
这样,我们在创建TrafficLight对象时,就可以直接传入Color类型的参数,使代码更加清晰。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java多线程实现交通灯管理系统 - Python技术站