假设一水盆有100口水,小猫每次喝2口水,兔子每次喝一口水。请用java多线程模拟兔子和小猫喝同该水盆的水。
时间: 2023-04-21 19:04:07 浏览: 68
可以使用Java多线程来模拟兔子和小猫喝同一水盆的水。可以创建两个线程,一个代表兔子,一个代表小猫。每个线程都可以在一个循环中不断地喝水,直到水盆中的水被喝完为止。
具体实现可以参考以下代码:
```
public class WaterBowl {
private int water = 100;
public synchronized int getWater(int amount) {
if (water >= amount) {
water -= amount;
return amount;
} else {
int remainingWater = water;
water = 0;
return remainingWater;
}
}
}
public class Cat implements Runnable {
private WaterBowl bowl;
public Cat(WaterBowl bowl) {
this.bowl = bowl;
}
public void run() {
while (true) {
int amount = bowl.getWater(2);
System.out.println("Cat drinks " + amount + " water");
if (amount == 0) {
break;
}
}
}
}
public class Rabbit implements Runnable {
private WaterBowl bowl;
public Rabbit(WaterBowl bowl) {
this.bowl = bowl;
}
public void run() {
while (true) {
int amount = bowl.getWater(1);
System.out.println("Rabbit drinks " + amount + " water");
if (amount == 0) {
break;
}
}
}
}
public class Main {
public static void main(String[] args) {
WaterBowl bowl = new WaterBowl();
Cat cat = new Cat(bowl);
Rabbit rabbit = new Rabbit(bowl);
Thread catThread = new Thread(cat);
Thread rabbitThread = new Thread(rabbit);
catThread.start();
rabbitThread.start();
}
}
```
在上面的代码中,WaterBowl类表示水盆,其中有一个water变量表示水的数量。getWater方法用于获取指定数量的水,如果水不足,则返回剩余的水量。
Cat和Rabbit类分别表示小猫和兔子,它们都实现了Runnable接口,可以在一个线程中运行。在run方法中,它们不断地从水盆中获取水,直到水被喝完为止。
在Main类中,创建了一个WaterBowl对象和两个线程,分别代表小猫和兔子。然后启动这两个线程,它们会在不同的时间内不断地喝水,直到水被喝完为止。