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

一个简单的线程问题
public   class   ThreadDemo1   extends   Thread{
public   void   run(){
for(int   a=0;a <50;a++){
try   {
Thread.sleep(5);
        }
        catch   (Exception   ex)   {
        }
        System.out.println(Thread.currentThread().getName()+ "     "+a);
}
}

public   static   void   main(String   []   args){
ThreadDemo1   t1=new   ThreadDemo1();
ThreadDemo1   t2=new   ThreadDemo1();
ThreadDemo1   t3=new   ThreadDemo1();
t1.run();
t2.run();
t3.run();
}
}


小弟有两个地方不太明白
1、Thread.currentThread().getName()   打印的是 "mian "   而不是   "Thread   -0 "之类的结果
 
2、为什么打印结果是:0~49,然后又打印0~49,最后再次打印0~49
而不是
三次循环夹杂打印呢


在线等待回复,谢谢

------解决方案--------------------
因为你一直在执行run方法,不是线程的start方法
------解决方案--------------------
public class TestThread {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println(Thread.currentThread().getName());
ThreadDemo1 t1 = new ThreadDemo1();
ThreadDemo1 t2 = new ThreadDemo1();
ThreadDemo1 t3 = new ThreadDemo1();
t1.start();
t2.start();
t3.start();
}

}

class ThreadDemo1 extends Thread {
public void run() {
for (int a = 0; a < 50; a++) {
try {
Thread.sleep(5);
} catch (Exception ex) {
}
System.out.println(Thread.currentThread().getName() + " " + a);
}
}
}
------解决方案--------------------
调用run方法的时候,这个整个程序就不作为线程来执行了,而是跟一般的程序一样,顺序执行,一直执行完
------解决方案--------------------
run方法只是一个普通方法,只有调用start才能达到效果,而在main方法中运行的线程打印出main也就不奇怪了