public class Multithreading { public static void main(String[] args) 
 {
  Test he=new Test();
  new Thread(he).start() ;
  new Thread(he).start() ;
  new Thread(he).start() ;
  new Thread(he).start() ;
  new Thread(he).start() ;
  new Thread(he).start() ;
  new Thread(he).start() ;
  new Thread(he).start() ;
 
  
 }
}
class Test implements Runnable
{
 int top=1;
 public void run()
 {
  
  while(top>0)
  {
   try{
    Thread.sleep(1);
   }catch(Exception e)
   {}
   System.out.println(Thread.currentThread().getName().toString()+"is running:top="+top--);
  }
 }
}
为什么当top取值为1时,线程按顺序执行,top取其他值时,没有这种现象?

解决方案 »

  1.   

    while(top>0)
    这个是你的条件么,满足这个不就全都开启了么,不知道你想问些什么
      

  2.   

    SensiblesImon(光荣与梦想) 
    while(top>0)
    这个是你的条件么,满足这个不就全都开启了么,不知道你想问些什么
    /////////////////
    是的,线程会全部开启,而且他是个线程不安全类.我想要明白的是:如果我将top值改为大于1的值时,线程启动的顺序无规则,但是当top的值改成1,线程启动的顺序一定严格按照0.1.2.3.4.5.6.7的顺序启动,为什么?
    chinson(鹤巢) (
    我试了几个值,都会按顺序,最后显示到-6啊
    ///////////////////////
    你搞没搞清楚,线程的启动顺序不是看那个top的取值,要看"Thread.currentThread().getName().toString()".
      

  3.   

    无意义
    线程调度 是 OS 的事情
    为抗击微软
    楼主预用 JAVA 写 OS?
    是静安寺不是道明寺,是源程序不是言承旭;是在静安寺写源程序,不是在流星花园看F4。
      

  4.   

    Thread-0is running:top=4
    Thread-1is running:top=3
    Thread-2is running:top=2
    Thread-3is running:top=1
    Thread-4is running:top=0
    Thread-5is running:top=-1
    Thread-6is running:top=-2
    Thread-7is running:top=-3
    Thread-0is running:top=-4
    Thread-1is running:top=-5
    Thread-2is running:top=-6
    如果TOP等于4或者其它值也是按顺序执行呀。
    这上面就是top=4的结果。