日期:2014-05-20  浏览次数:20699 次

这个小程序为什么一运行电脑就死机啊
public class test1
{
public static void main(String[] args)
{  
xc xc1=new xc();

new Thread(xc1).start();
//如果再添加一个new Thread(xc1).start()线程就会死机,不知道为啥[/color]


 
}

}
class xc implements Runnable
{
  private int total=20;
  public void run()
  {
  
 while(true)
 {
 if(total>0)
  System.out.println(Thread.currentThread().getName()+"tickets is"+total--);
 }
  }


}
------解决方案--------------------
Thread-0tickets is19
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
完全可以啊。。。
------解决方案--------------------
lz:你放2个一样的线程一起执行他们抢资源啊,(而且你没关闭!),而资源有2个,一个是执行的程序,一个是系统输出程序(可能是的打个比方的)。输出结果是不定的哦,就说t1 t2 2个一样的线程吧,他俩运行速度是随机的,当t1拿了total==20的值将total变为19,问题来了,这时t2运行了他抢了t1的资源它运行起来了并且输出了19,t1被迫等待(这个等待有可能是无限的因为t2一直快t2没执行完前t1“面壁”,当然这是随机的概率很小),当然t1有可能后来居上抢回资源输出20.在这争抢过程中可能会出现一些特殊情况(俺不太清楚撒,就知道输出的顺序是随机的,当然要多执行几次了),你可以将条件total>0改为total==0,多试几次会出现无限循环的现象,这样应该就理解点了吧。(这方法是前辈教的哦)