问题场景,1000瓶水 三个人拿,每人每次拿20瓶,库存少于100瓶则补充,大家看我运行截图,出大问题。
运行结果部分:
比赛1拿走20瓶水,现场馆有水980瓶水
比赛1拿走20瓶水,现场馆有水960瓶水
比赛1拿走20瓶水,现场馆有水940瓶水
比赛1拿走20瓶水,现场馆有水920瓶水
比赛1拿走20瓶水,现场馆有水900瓶水
比赛1拿走20瓶水,现场馆有水880瓶水
比赛1拿走20瓶水,现场馆有水860瓶水
比赛1拿走20瓶水,现场馆有水840瓶水
以下重复
··
一直都是就比赛1这一个线程在搬水,其他线程怎么不动啊!!
import java.lang.constant.Constable;
class Water {
public static int num;
public Water(int num) {
this.num=num;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
class Game extends Thread{
private Water water;
private String name;
int n;
public Game(Water water, String name, int n) {
this.water = water;
this.name = name;
this.n = n;
}
private static Object object=new Object();
@Override
public void run() {
synchronized (object) {
while (water.num > 100) {
if (water.num > 100) {
water.num = water.num - n;
System.out.println(name + "拿走" + n + "瓶水," + "现场馆有水" + water.num + "瓶水");
}
}
}
try{
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Test {
public static void main(String[] args) {
Water water = new Water(1000);
Game game1 = new Game(water, "比赛1", 20);
Game game2 = new Game(water, "比赛2", 20);
Game game3 = new Game(water, "比赛3", 20);
game1.start();
game2.start();
game3.start();
}
}