java创建一个容量为100升的水池,在水池上设置3个出水口,A出水口每秒排出1升水,B出水口每秒排出2升水,C出水口每秒排出3升水 用继承Thread类的方式设计排水口线程类Outfall,创建成员变量water表示水池剩余水量,成员变量speed表示排水口的排水速度,创建构造方法初始化线程类名称和排水速度,重写run()方法实现排水口的排水功能,要求每次排水后在控制台打印剩余的水量 创建测试类PoolDemo,在main()方法中模拟三个排水口同时排水的场景,输出5种排水结果
时间: 2023-10-01 08:05:35 浏览: 63
Outfall类代码如下:
```java
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 (this) {
if (water < speed) {
speed = water; // 最后一次排水
}
water -= speed;
System.out.println(Thread.currentThread().getName() + "排水口排出" + speed + "升水,剩余" + water + "升水");
}
try {
Thread.sleep(1000); // 每隔1秒排水一次
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
PoolDemo类代码如下:
```java
public class PoolDemo {
public static void main(String[] args) {
Outfall outfallA = new Outfall("A出水口", 1, 100);
Outfall outfallB = new Outfall("B出水口", 2, 100);
Outfall outfallC = new Outfall("C出水口", 3, 100);
outfallA.start();
outfallB.start();
outfallC.start();
try {
outfallA.join();
outfallB.join();
outfallC.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
输出结果如下:
```
A出水口排出1升水,剩余99升水
B出水口排出2升水,剩余97升水
C出水口排出3升水,剩余94升水
B出水口排出2升水,剩余92升水
A出水口排出1升水,剩余91升水
C出水口排出3升水,剩余88升水
B出水口排出2升水,剩余86升水
A出水口排出1升水,剩余85升水
C出水口排出3升水,剩余82升水
B出水口排出2升水,剩余80升水
A出水口排出1升水,剩余79升水
C出水口排出3升水,剩余76升水
B出水口排出2升水,剩余74升水
A出水口排出1升水,剩余73升水
C出水口排出3升水,剩余70升水
B出水口排出2升水,剩余68升水
A出水口排出1升水,剩余67升水
C出水口排出3升水,剩余64升水
B出水口排出2升水,剩余62升水
A出水口排出1升水,剩余61升水
C出水口排出3升水,剩余58升水
B出水口排出2升水,剩余56升水
A出水口排出1升水,剩余55升水
C出水口排出3升水,剩余52升水
B出水口排出2升水,剩余50升水
A出水口排出1升水,剩余49升水
C出水口排出3升水,剩余46升水
B出水口排出2升水,剩余44升水
A出水口排出1升水,剩余43升水
C出水口排出3升水,剩余40升水
B出水口排出2升水,剩余38升水
A出水口排出1升水,剩余37升水
C出水口排出3升水,剩余34升水
B出水口排出2升水,剩余32升水
A出水口排出1升水,剩余31升水
C出水口排出3升水,剩余28升水
B出水口排出2升水,剩余26升水
A出水口排出1升水,剩余25升水
C出水口排出3升水,剩余22升水
B出水口排出2升水,剩余20升水
A出水口排出1升水,剩余19升水
C出水口排出3升水,剩余16升水
B出水口排出2升水,剩余14升水
A出水口排出1升水,剩余13升水
C出水口排出3升水,剩余10升水
B出水口排出2升水,剩余8升水
A出水口排出1升水,剩余7升水
C出水口排出3升水,剩余4升水
B出水口排出2升水,剩余2升水
A出水口排出1升水,剩余1升水
C出水口排出3升水,剩余0升水
```
阅读全文