public class MyThread extends Thread{
int count=1,number;

public MyThread(int num){
number=num;
System.out.println("创建线程"+ number);
}

public void run(){
while(true){
System.out.println("线程"+number+":计数"+count);
if(++count==3)return;
}
}

public static void main(String args[]){
for(int i=0;i<2;i++)new MyThread(i+1).start();
}
}
编译运行后结果为:
    创建线程1
    创建线程2
    线程1:计数1
    线程1:计数2
    线程2:计数1
    线程2:计数2
我的疑问是,依我看来结果应该是:
    创建线程1  (for循环一次,执行一次构造函数)
    线程1:计数1(构造函数运行后执行start调用run())
    创建线程1  (for循环第2次,执行一次构造函数)
    线程1:计数1(第2次new,构造函数运行后执行start调用run())请高手指教!!!

解决方案 »

  1.   

    不要假设多线程程序的执行路线.. 怎么都是有可能的!你可以把count设大一点, 比如100, 或者1000之类的, 然后main方法多创建几个线程看看效果
      

  2.   

    jk88811(jkzqw)说的在理啊。
    加大循环次数,或者再循环中,或者再run中加入
    Thread.sleep(0);
    改变sleep的长度,或许你能看到很多不同的执行结果。
      

  3.   

    我机子的运行结果和楼主一样
    我认为先执行main函数,然后依次执行
      

  4.   

    for(int i=0;i<2;i++)new MyThread(i+1).start()当执行完new MyThread(1).start()时,已经有两个线程-main和线程1,两个线程都会请求cpu响应,并且这两个线程的优先级都一样,这个时候cpu响应任何一个线程都是可能的。如果你想看到
       创建线程1  (for循环一次,执行一次构造函数)
        线程1:计数1(构造函数运行后执行start调用run())
        创建线程2  (for循环第2次,执行一次构造函数)
        
    这样的效果
    可以将代码改为:for(int i=0;i<2;i++){new MyThread(i+1).start();Thread.sleep(10);}