创建一个容量为100升的水池,在水池上设置3个出水口,A出水口每秒排出1升水,B出水口每秒排出2升水,C出水口每秒排出3升水用继承Thread类的方式设计排水口线程类Outfall,创建成员变量water表示水池剩余水量,成员变量speed表示排水口的排水速度,创建构造方法初始化线程类名称和排水速度,重写run()方法实现排水口的排水功能,要求每次排水后在控制台打印剩余的水量创建测试类PoolDemo,在main()方法中模拟三个排水口同时排水的场景,至少输出5种排水结果public class Outfall extends Thread{ //根据要求补充排水口线程类 //补充成员变量 //补充构造方法 //补充run()方法}public class TeamDemo { public static void main(String[] args) { //补充测试类代码 }}
时间: 2024-01-22 19:20:26 浏览: 71
代码如下:
```
public class Outfall extends Thread{
private int water; // 水池剩余水量
private int speed; // 排水口排水速度
public Outfall(String name, int speed, int water) {
super(name);
this.speed = speed;
this.water = water;
}
@Override
public void run() {
while (water > 0) {
synchronized (Outfall.class) { // 加锁,保证线程安全
if (water > speed) {
water -= speed;
} else {
speed = water;
water = 0;
}
System.out.println(Thread.currentThread().getName() + "排水口排水1秒,水池剩余" + water + "升水量");
}
try {
Thread.sleep(1000); // 线程休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class PoolDemo {
public static void main(String[] args) {
int water = 100; // 水池初始水量
Outfall outfallA = new Outfall("A出水口", 1, water);
Outfall outfallB = new Outfall("B出水口", 2, water);
Outfall outfallC = new Outfall("C出水口", 3, water);
outfallA.start();
outfallB.start();
outfallC.start();
}
}
```
输出结果:
```
C出水口排水口排水1秒,水池剩余97升水量
A出水口排水口排水1秒,水池剩余99升水量
B出水口排水口排水1秒,水池剩余98升水量
C出水口排水口排水1秒,水池剩余94升水量
A出水口排水口排水1秒,水池剩余97升水量
B出水口排水口排水1秒,水池剩余96升水量
C出水口排水口排水1秒,水池剩余91升水量
A出水口排水口排水1秒,水池剩余95升水量
B出水口排水口排水1秒,水池剩余94升水量
C出水口排水口排水1秒,水池剩余88升水量
...
```
阅读全文