编写Java程序,前方有 3km 的道路障碍,4 辆普通车不能通过,必须等到清障车完成作业离开后,才能继续行驶。用程序来模拟这一过程的发生

简介: 编写Java程序,前方有 3km 的道路障碍,4 辆普通车不能通过,必须等到清障车完成作业离开后,才能继续行驶。用程序来模拟这一过程的发生

需求说明:


前方有 3km 的道路障碍,4 辆普通车不能通过,必须等到清障车完成作业离开后,才能继续行驶。用程序来模拟这一过程的发生

18.png


实现思路:


创建清障车Wrecker类和车辆OrdinaryVehicle类都需要继承Thread 类

在 Wrecker 类中,定义初始化线程名的参构造方法,重写run方法,run方法中模拟循环3次,打印输出清障车的清理进度,并调用 Thread 类的 sleep休眠1.5秒

在 OrdinaryVehicle 类中,声明一个 Wrecker 类型的引用变量 wrecker,同时声明初始化线程名和Wrecker对象的构造方法。重写run方法,调用 wrecker 的 join() 方法,等待 wrecker 线程执行完成。定义一个只循环 3 次的 for 循环,在循环体内打印输出普通车辆的行驶里程,并调用休眠方法0.5秒

创建 TestCase 类。在该类的 main() 方法中,分别创建一个 Wrecker 对象和 3 个 OrdinaryVehicle 对象,依次调用 Wrecker 对象和 OrdinaryVehicle 对象的 start() 方法,启动这 4 条线程


实现代码:


清障车Wrecker类


public class Wrecker extends Thread{
  public Wrecker(String name) {
    this.setName(name);
  }
  @Override
  public void run() {
    super.run();
    //每循环一次表示清理了1km障碍
    for (int i = 1; i <=3 ; i++) {
      System.out.println("清理车已清理了前方"+i+"km 的障碍");
      try {
        Thread.sleep(1500);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}


车辆OrdinaryVehicle类


public class OrdinaryVehicle extends Thread{
  private Wrecker wrecker;
  public OrdinaryVehicle(Wrecker wrecker, String name) {
    super();
    this.wrecker = wrecker;
    this.setName(name);
  }
  @Override
  public void run() {
    super.run();
    try {
      wrecker.join();
      for (int i = 1; i <= 3; i++) {
        System.out.println("在"+wrecker.getName()+"清理完成障碍之后,"
            +this.getName()+"行驶了"+i+"km");
        Thread.sleep(500);
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}


TestCase 类


public class TestCase {
  public static void main(String[] args) {
    //创建清障车线程
    Wrecker wrecker = new Wrecker("清障车");
    //创建4条普通车辆线程
    OrdinaryVehicle car_a = new OrdinaryVehicle(wrecker,"车辆A");
    OrdinaryVehicle car_b = new OrdinaryVehicle(wrecker,"车辆B");
    OrdinaryVehicle car_c = new OrdinaryVehicle(wrecker,"车辆C");
    OrdinaryVehicle car_d = new OrdinaryVehicle(wrecker,"车辆D");
    //先启动清障车线程,再依次启动4条普通车辆线程
    wrecker.start();
    car_a.start();
    car_b.start();
    car_c.start();
    car_d.start();
  }
}



相关文章
|
1月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
1月前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
57 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
2月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
21天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
34 2
|
23天前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
|
27天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
32 1
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
39 5
|
2月前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
29天前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
25 0
|
1月前
|
Java
java的程序记录时间
java的程序记录时间
24 0
下一篇
无影云桌面