java多线程实现交通灯管理系统

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技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Java的Struts框架报错“NullActionForwardException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullActionForwardException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查文件以解决此问题。 转发名称:如果转发名称不正确,则可能出现此。在这种情况下,需要检查转发名称以解决此问题。 以下是两个实例: 例 1 如果配置…

    Java 2023年5月5日
    00
  • SpringMVC学习之JSON和全局异常处理详解

    SpringMVC学习之JSON和全局异常处理详解 JSON 什么是JSON JSON是一种轻量级的数据交换格式,它的设计是为了易于阅读和编写。JSON是基于JavaScript的一个子集,可以用于表示简单的数据结构和对象,常用于Web前端和服务器之间的数据传输。 在SpringMVC中使用JSON SpringMVC内置了MappingJackson2Ht…

    Java 2023年5月26日
    00
  • java实现中英文混合字符截取方法

    Java实现中英文混合字符截取方法 在Java中,截取字符串可以使用String类中的substring方法。但是当字符串中包含中英文混合的字符时,使用substring方法会出现问题,导致截取的结果不符合预期。本文将介绍如何正确地实现中英文混合字符的截取方法。 问题分析 我们来看一个例子,假设我们要截取下面这个字符串的前5个字符: String str =…

    Java 2023年5月27日
    00
  • java Spring Boot 配置redis pom文件操作

    Java Spring Boot 是一个快速开发应用程序的框架,而 Redis 是一个基于内存存储的数据结构存储系统。在 Spring Boot 应用程序中,我们可以配置 Redis,以便有效地管理数据。 以下是配置 Redis 的 pom 文件操作的完整攻略: 步骤1:引入 Redis 依赖项 在 pom.xml 文件中添加以下代码: <depend…

    Java 2023年5月20日
    00
  • 详解JAVA 字节流和字符流

    详解JAVA 字节流和字符流 在JAVA中,流是指一种数据传输方式,可以从一个地方读入数据并传输到另一个地方,或者从一个地方写数据到另一个地方。在JAVA中,根据数据类型的不同,流分为字节流和字符流两种类型。本文将详细讲解JAVA 字节流和字符流的特点,使用场景以及相关常用类的详细使用方法。 字节流与字符流 字节流 JAVA中的字节流,是用于处理字节数据的I…

    Java 2023年5月26日
    00
  • MySQL中的布尔值,怎么存储false或true

    MySQL中的布尔值实际上是用tinyint类型来存储的,其中0代表false,1代表true。可以通过以下两种方式来存储和查询布尔值: 存储布尔值 在MySQL中,可以直接使用0或1来插入布尔值,也可以使用关键字true或false。例如,以下是如何插入true值的SQL语句: INSERT INTO `mytable` (`mybool`) VALUES…

    Java 2023年6月16日
    00
  • Servlet服务端实现原理详解

    一、Servlet服务端实现原理 在Web应用中,服务端可以通过Java的Servlet技术实现对客户端(浏览器)的响应。Servlet是运行在服务端的Java程序,实现了应用服务器与客户端(浏览器)之间的通讯和数据交换。Servlet是一种通用的、基于Java的服务器端组件技术,它是在服务器端动态生成Web页面或进行数据处理的主要手段之一。 Servlet…

    Java 2023年6月15日
    00
  • 基于Java生成GUID的实现方法

    基于Java生成GUID的实现方法 GUID(即全局唯一标识符)是一种算法,用于在计算机系统中生成唯一的标识符。本文将介绍在Java中生成GUID的实现方法。 UUID类 Java提供了一个UUID类,可以用于生成GUID。UUID是一个128位数字,通常用32个十六进制数表示。它有几个版本,其中最常用的是版本4(在Java中对应的是randomUUID()…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部