这个小程序为什么一运行电脑就死机啊 thread 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 while(true) { if(total>0) System.out.println(Thread.currentThread().getName()+"tickets is"+total--); } }没有跳出循环条件,死循环 Thread-0tickets is19Thread-1tickets is20Thread-0tickets is18Thread-1tickets is17Thread-0tickets is16Thread-1tickets is15Thread-0tickets is14Thread-1tickets is13Thread-0tickets is12Thread-1tickets is11Thread-0tickets is10Thread-1tickets is9Thread-0tickets is8Thread-1tickets is7Thread-0tickets is6Thread-1tickets is5Thread-0tickets is4Thread-0tickets is2Thread-0tickets is1Thread-1tickets is3完全可以啊 不打打印不代表while不走,死循环! lz:你放2个一样的线程一起执行他们抢资源啊,(而且你没关闭!),而资源有2个,一个是执行的程序,一个是系统输出程序(可能是的打个比方的)。输出结果是不定的哦,就说t1 t2 2个一样的线程吧,他俩运行速度是随机的,当t1拿了total==20的值将total变为19,问题来了,这时t2运行了他抢了t1的资源它运行起来了并且输出了19,t1被迫等待(这个等待有可能是无限的因为t2一直快t2没执行完前t1“面壁”,当然这是随机的概率很小),当然t1有可能后来居上抢回资源输出20.在这争抢过程中可能会出现一些特殊情况(俺不太清楚撒,就知道输出的顺序是随机的,当然要多执行几次了),你可以将条件total>0改为total==0,多试几次会出现无限循环的现象,这样应该就理解点了吧。(这方法是前辈教的哦) if语句后面加一句elsebreak;就不会死了 死循环,都不懂吗? while(true)//这个永远满足啊 何况你也没有跳出循环 { if(total>0) System.out.println(Thread.currentThread().getName()+"tickets is"+total--); } } 你可以这样做while(true)//这个永远满足啊 所以 你要想办法跳出循环 { if(total>0) System.out.println(Thread.currentThread().getName()+"tickets is"+total--); }else{ break;} } while(true)//这个永远满足啊 所以 你要想办法跳出循环 { if(total>0){ System.out.println(Thread.currentThread().getName()+"tickets is"+total--); }else{ break;} } 说实话,我建议楼主再用while true 的时候 让线程sleep一下,慢慢看打印结果,这样很容易让内存挂的 把这些学完 大概要多久时间 java中的继承 mysql中怎样批量往表里插入数据? 一个关于VECTOR的用法错误,或者是java思想上的错误,请大家帮忙 求助 java socket编程c/s在同一台机器上与c/s在不同机器上的区别 为什么会提示'javac' 不是内部或外部命令,也不是可运行的程序 java计时器在哪儿呀 求注java一个困惑问题 有个问题想问 如何实现每30秒就执行一段程序? Scanner构造器从文件中读取数据? Socket接收输入流readLine()
{
if(total>0)
System.out.println(Thread.currentThread().getName()+"tickets is"+total--);
}
}没有跳出循环条件,死循环
Thread-1tickets is20
Thread-0tickets is18
Thread-1tickets is17
Thread-0tickets is16
Thread-1tickets is15
Thread-0tickets is14
Thread-1tickets is13
Thread-0tickets is12
Thread-1tickets is11
Thread-0tickets is10
Thread-1tickets is9
Thread-0tickets is8
Thread-1tickets is7
Thread-0tickets is6
Thread-1tickets is5
Thread-0tickets is4
Thread-0tickets is2
Thread-0tickets is1
Thread-1tickets is3
完全可以啊
else
break;
就不会死了
{
if(total>0)
System.out.println(Thread.currentThread().getName()+"tickets is"+total--);
}
}
你可以这样做
while(true)//这个永远满足啊 所以 你要想办法跳出循环
{
if(total>0)
System.out.println(Thread.currentThread().getName()+"tickets is"+total--);
}else{
break;
}
}
{
if(total>0){
System.out.println(Thread.currentThread().getName()+"tickets is"+total--);
}else{
break;
}
}