class TestThread extends Thread{
public TestThread(String name){
super(name);
}
public void run(){
System.out.println(Thread.currentThread().getName());
}
}
public class trya {
    public static void main(String[] args){    
     new TestThread("t1").start();
    }    
}  
输出结果为t1
如果new TestThread("t1").start() 改为 new TestThread("t1").run()
输出结果为main
这是为什么呢?

解决方案 »

  1.   

    Java中启动线程start和run方法
    好好看看这篇文章
      

  2.   

    start方法是新创建一个线程并进入就绪状态,新线程获取道cpu时间片后执行run方法。而直接调用run方法就相当于调用Thread类对象的方法,当前还是在main线程中执行。
      

  3.   

    start方法执行的时候会为调用者创建一个线程,那现在就有一个main线程和一个叫"t1"的线程,然后执行run方法,那输出的就是t1了。但是如果你直接执行run方法,那就不会有新的线程出现了,只有主函数的main线程,所以执行run方法时,输出的是主线程mian的名字。
      

  4.   

    start是调用底层开启新的线程执行,run就是调用了该类中的一个方法,不开启任何线程。