启动线程应该用start
你直接调用run,其实和调用一个普通类的方法没什么区别,因为你的程序很短,run很快结束了。如果run的时间比较长,甚至是无限循环的话,你用start和run差别就很大了。

解决方案 »

  1.   

    另外如果把上面的run()都换成start(),运行结果虽一样,但跟上面的有什么不同?
    public class Runt extends Thread{
    public static void main(String argv[]){
            Runt r = new Runt();
            r.start();
            }
            public void start(){
            for(int i=0;i<100;i++)
                    System.out.println(i);
            }
    }
    是不是用start()的才真正起了线程?
      

  2.   

    start是启动一个线程,然后在里面运行run,你的是在当前线程执行run。多线程是用start来实现的。
      

  3.   

    谢谢 chenyuan_tongji(codeguru) :
    你的意思是线程调start()方法比用一般的类方法效率上要快,但start()其实不也是去调run()吗?
    不太明白具体的原理机制,能否详细解释,再次感谢!
      

  4.   

    run并没有起一个线程,也就是说你调用run,那java并未新增一个线程来处理你的run里面的事件,用start的话,java就新增了一个线程来处理是我的理解
      

  5.   

    >你的意思是线程调start()方法比用一般的类方法效率上要快,但start()其
    >实不也是去调run()吗?
    我不是那个意思
    start()不会去调用run(),一个thread的run()是由jvm调用的。start()的作用是表明这个thread现在开始处于ready状态,jvm可以调用这个thread上台,占用cpu执行其run里面的东西。
    不要手工去调用run()
      

  6.   

    直接调用run()方法是在程序主线程main()中运行run()方法,而start则是新建一个线程r,在r线程里运行run()方法,所占用的cpu时间有很大的差别。