解决方案 »

  1.   

    while(true)
     {
     if(total>0)
      System.out.println(Thread.currentThread().getName()+"tickets is"+total--);
     }
      }没有跳出循环条件,死循环
      

  2.   

    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
    完全可以啊
      

  3.   

    不打打印不代表while不走,死循环!
      

  4.   

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

  5.   

    if语句后面加一句
    else
    break;
    就不会死了
      

  6.   

    死循环,都不懂吗?   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;
    }
      }
      

  7.   

    while(true)//这个永远满足啊  所以 你要想办法跳出循环  
     {
     if(total>0){
      System.out.println(Thread.currentThread().getName()+"tickets is"+total--);
     }else{
      break;
    }
      }
      

  8.   

    说实话,我建议楼主再用while  true  的时候  让线程sleep一下,慢慢看打印结果,这样很容易让内存挂的