查看本章节
查看作业目录
需求说明:
前方有 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();
}
}