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

查看本章节

查看作业目录


需求说明:

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

实现思路:

  • 创建清障车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();
	}

}

 

posted @ 2020-09-26 14:20  明金同学  阅读(38)  评论(0编辑  收藏  举报