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())请高手指教!!!
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())请高手指教!!!
加大循环次数,或者再循环中,或者再run中加入
Thread.sleep(0);
改变sleep的长度,或许你能看到很多不同的执行结果。
我认为先执行main函数,然后依次执行
创建线程1 (for循环一次,执行一次构造函数)
线程1:计数1(构造函数运行后执行start调用run())
创建线程2 (for循环第2次,执行一次构造函数)
这样的效果
可以将代码改为:for(int i=0;i<2;i++){new MyThread(i+1).start();Thread.sleep(10);}