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日

相关文章

  • spring boot 配置动态刷新详解

    SpringBoot配置动态刷新详解 在SpringBoot应用程序中,我们通常需要对配置进行修改,但是修改后需要重启应用程序才能生效,这对于生产环境来说是不可接受的。为了解决这个问题,SpringBoot提供了配置动态刷新功能,可以在不重启应用程序的情况下更新配置。本文将详细介绍SpringBoot配置动态刷新的实现原理和使用方法。 实现原理 Spring…

    Java 2023年5月15日
    00
  • Eclipse如何导入Maven项目详解(新手初学)

    Eclipse如何导入Maven项目详解(新手初学) 对于新手初学者来说,使用Eclipse导入Maven项目并不是一件容易的事。下面将详细讲解如何导入Maven项目。 步骤一:安装Maven插件 在Eclipse中安装Maven插件,插件名称为”Maven Integration for Eclipse”。安装方法如下: 打开Eclipse,点击“Help…

    Java 2023年5月20日
    00
  • 基于Spring整合mybatis的mapper生成过程

    下面是基于Spring整合MyBatis的Mapper生成过程的完整攻略。 1. 准备工作 在开始整合MyBatis和Spring之前,确保已经完成以下工作: 已经拥有一个Spring项目并且能够正常运行; 已经添加了MyBatis和MyBatis-Spring的依赖; 已经配置了MyBatis的数据源、事务管理和SqlSessionFactory等内容。 …

    Java 2023年5月20日
    00
  • tomcat性能优化(性能总览)

    Tomcat性能优化(性能总览) 为了提高Tomcat的性能,可以考虑以下几个方面的优化: 1. 确定性能瓶颈 我们需要确定Tomcat的性能瓶颈。可以使用JProfiler等工具来对Tomcat进行性能分析和优化。通过分析Tomcat的CPU利用率、内存使用情况、I/O和网络延迟情况等指标,可以帮助我们定位性能瓶颈。 2. Tomcat服务器配置优化 2.…

    Java 2023年5月19日
    00
  • Spring 使用注解方式进行事务管理配置方式

    Spring 使用注解方式进行事务管理的配置方式主要是通过在类或方法上添加@Transactional注解来进行配置。下面是完整的配置流程: 引入相关依赖 Spring 支持多种事务管理方式,而使用注解方式进行事务管理需要引入如下依赖: <!– Spring JDBC –> <dependency> <groupId>…

    Java 2023年5月20日
    00
  • Struts2拦截器登录验证实例

    下面是“Struts2拦截器登录验证实例”的完整攻略。 1. 确认需求 首先,我们需要明确需求,即需要在 Struts2 项目中添加登录验证功能。具体来说就是,用户在访问某些敏感页面时,必须先登录才能查看。 2. 创建登录页面和验证页面 第二步,我们需要创建登录页面和验证页面。在登录页面中,需要输入用户名和密码,然后提交表单。在验证页面中,需要根据提交的用户…

    Java 2023年5月20日
    00
  • 一篇文章带你详解Spring的概述

    一篇文章带你详解Spring的概述 介绍 Spring 是一个开源的框架,用于构建企业级 Java 应用程序。 它为开发人员提供了丰富的功能,以面向对象的方式轻松构建轻量级、可维护、松耦合以及可扩展的应用程序。Spring 框架基于依赖注入(DI)和面向切面编程(AOP)为核心,简化了企业应用程序的开发。本文将通过介绍 Spring 的基础知识、DI、AOP…

    Java 2023年5月19日
    00
  • Java运行Jar包内存配置的操作

    下面是关于Java运行Jar包内存配置的完整攻略: 一、什么是JVM内存 Java虚拟机(JVM)是一个程序,它能够执行Java字节码。而JVM内部的内存管理,也就是内存分配和垃圾回收机制,对程序的性能和稳定性都有着重要的影响。Java运行时内存主要分为两部分: 堆内存和 非堆内存。 在Java程序运行时,JVM需要分配一定的内存空间用于执行程序。其中,堆内…

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