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+Ajax实现的用户名重复检验功能实例详解

    下面是关于“Java+Ajax实现的用户名重复检验功能实例详解”的完整攻略。 1. 概述 本篇攻略主要介绍如何使用Java和Ajax技术实现一个用户名重复检验功能。在用户填写用户名时,系统会自动检测该用户名是否已经被占用,如果已经被占用,则会提示用户重新填写。 2. 实现步骤 2.1 创建数据库 使用MySQL数据库,创建一个名为user的表,表中包含如下字…

    Java 2023年6月15日
    00
  • JAVA中的for循环几种使用方法讲解

    JAVA中的for循环几种使用方法讲解 在Java中,for循环是最常用的循环结构之一。它可以重复执行代码块,根据不同的循环条件可以有多种使用方式。 基本的for循环 最基本的for循环有三个部分,分别是循环变量初始化、循环条件和循环变量的更新。语法如下: for (循环变量初始化; 循环条件; 循环变量的更新) { // 循环体代码块 } 其中,循环变量初…

    Java 2023年5月26日
    00
  • struts2 jquery 打造无限层次的树

    确保能够正确的讲解 “struts2 jquery 打造无限层次的树” 这一话题,我们需要先分析以下这个主题的三个关键词: struts2、jquery、树。本文将结合这三个关键词,详细讲解 “struts2 jquery 打造无限层次的树” 的完整攻略。具体的攻略内容如下: 1. 引入Struts2 首先,我们需要在项目中引入 Struts2,具体方式如下…

    Java 2023年6月16日
    00
  • Java Arrays.AsList原理及用法实例

    Java Arrays.AsList 原理及用法实例 简介 Arrays.AsList() 是 Java 中的一个常见方法,主要用于将数组转换成List集合。在实际开发中,我们通常将数组转化为 List 后,便可以使用其提供的方法方便地对集合进行操作。 语法 Arrays.asList(T… a); 其中 T 表示传入参数类型,a 表示用于转化的数组对象…

    Java 2023年5月26日
    00
  • c# 如何实现代码生成器

    实现 C# 代码生成器的方法有很多,但下面我将介绍一种比较常用的方式,主要依赖Roslyn分析器。下面是完整攻略: 1. 安装 Roslyn 的 NuGet 包 首先需要安装 Roslyn 的 NuGet 包:Microsoft.CodeAnalysis.CSharp。可以在 Visual Studio 的 NuGet 面板中搜索该包进行安装。安装成功后,你…

    Java 2023年5月19日
    00
  • Spring Boot打包war jar 部署tomcat

    下面详细讲解一下“Spring Boot打包war/jar部署tomcat”的完整攻略。 1. 打包war包并部署到tomcat 第一步:创建Spring Boot项目 首先需要创建一个Spring Boot项目,可以使用IDEA、Eclipse等开发工具创建,也可以使用Spring Initializr在线生成项目模板。 第二步:添加依赖 在项目的pom.…

    Java 2023年5月19日
    00
  • 详解Java中实现SHA1与MD5加密算法的基本方法

    当今网络环境中,安全性是非常重要的一个问题。密码的保护已经成为了一个必须面对的任务。SHA1和MD5是两种常见的加密算法,它们可以将密码字符串加密为一串看似随意的字符,从而实现密码的保护。在Java中,实现SHA1与MD5加密算法有以下基本方法: 1. 使用Java内置的MessageDigest类 MessageDigest是Java提供的安全类之一,它可…

    Java 2023年5月19日
    00
  • Sprint Boot @RestController使用方法详解

    @RestController是Spring Boot中的一个注解,它用于标记一个类,表示该类是一个RESTful风格的控制器。在使用Spring Boot开发Web应用程序时,@RestController是非常重要的。本文将详细介绍@RestController的作用和使用方法,并提供两个示例说明。 @RestController的作用 @RestCon…

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