一个java程序,执行之后老是会出现死循环,烦请大神解答

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;
}
}
}
}

}

第1个回答  2015-11-20
你在主线程里面的while(true) 导致死循环了,起码你要在里面执行一条稍微好时间的语句,或者加上
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
让程序暂停一下,再循环追问

大神正解,sleep一下就解决了,甚至在if前面加一条输出语句都能解决,但是背后的原因是什么我一直搞不清,我在子线程里加了一条输出语句,显示count已经==0了,但是为什么后面那个while还是无法进入if语句呢,还需要停顿一下才可以进入呢

追答

sleep(10)对用户没什么实质影响,但对JVM有影响,在sleep(10)这段时间线程休眠,可以走到if代码段判断条件再根据条件结束线程,如果没有sleep(10)这句,程序会一直在while内部循环,走不到if代码段

本回答被提问者和网友采纳
第2个回答  2015-11-20
while(true)没有结束条件,按你的这个逻辑来看应该是money总钱数大于0时,都可以取,如果等于0那么跳出。。所以这个该是 while(money>0)
第3个回答  2015-11-20
你没办法确保Withdraw的money正好等于0,所以你main方法里面的while会是个死循环,你直接在if里通过if(Withdraw.money <=0)来判断吧
第4个回答  2015-11-20
在循环里面把money都打印下看看剩余多少。。。。。 你把钱都给你老婆了
第5个回答  2015-11-20
截个图也好啊 怎么弄 怎么看追问

追答

逻辑有问题,if(Withdraw.money==0){

相似回答