编写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
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
298 98
|
2月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
66 5
|
2月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
167 3
|
2月前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
70 1
|
2月前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
76 2
|
2月前
|
Java
Java基础学习day04-作业
本作业包含8个Java编程案例,涵盖数组的定义与遍历、求和、最值计算、去极值求平均、元素倍增、二维数组行和计算及查找指定元素等内容,旨在巩固Java基础语法与数组操作技能。
206 1
|
2月前
|
算法 Java
Java基础学习day03-作业
本内容包含多个Java编程案例,涵盖条件判断、循环、数组、随机数生成、素数判断等基础算法练习,适用于巩固Java语法与逻辑思维训练。
122 6
|
2月前
|
Java
Java基础学习day02-作业
本内容包含13个Java编程练习需求,涵盖变量定义、数据类型转换、运算符使用、键盘输入及条件判断等基础语法实践,适合初学者巩固Java核心基础知识。
80 5
|
Java
Java基础学习day01-作业
通过多个Java编程案例,学习变量定义、数据类型使用及控制台输出。涵盖字符串、数值、布尔值等字面量输出,变量赋值与修改,以及实际应用场景如学生信息和商品价格变化的模拟,夯实基础语法掌握。
90 0