import java.util.Random;
//需求:一个取钱游戏,两个人同时取钱,他们比赛看谁取到的钱多
class Withdraw extends Thread{
public Withdraw(String name){
super(name);
}
//定义一个变量,记录总钱数
static int money=5000;
Random random=new Random();
static int a=0;
//定义一个变量,记录对象总共取到了多少钱
int moneyWithdrawed=0;
//重写run方法
public void run(){
while(true){
synchronized("取钱过程"){
if(money>0){
a=random.nextInt(1000);
if(a>money){
continue;
}
System.out.println(this.getName()+"取到了"+a+"元");
moneyWithdrawed+=a;
money-=a;
}else{
break;
}
}
}
System.out.println(Thread.currentThread().getName()+"总共取到了"+moneyWithdrawed+"元");
}
}
public class Demo8 {
public static void main(String[] args) {
Withdraw wife=new Withdraw("老婆");
Withdraw husband=new Withdraw("老公");
wife.start();
husband.start();
//
while(true){
if(Withdraw.money==0){
if(wife.moneyWithdrawed>husband.moneyWithdrawed){
System.out.println("老婆赢了");
break;
}else{
System.out.println("老公赢了");
break;
}
}
}
}
}
大神正解,sleep一下就解决了,甚至在if前面加一条输出语句都能解决,但是背后的原因是什么我一直搞不清,我在子线程里加了一条输出语句,显示count已经==0了,但是为什么后面那个while还是无法进入if语句呢,还需要停顿一下才可以进入呢
sleep(10)对用户没什么实质影响,但对JVM有影响,在sleep(10)这段时间线程休眠,可以走到if代码段判断条件再根据条件结束线程,如果没有sleep(10)这句,程序会一直在while内部循环,走不到if代码段
本回答被提问者和网友采纳