哪个最好调用start()或run()方法来执行线程

时间:2014-07-21 08:17:47

标签: java multithreading

根据我的理解,当我调用start()方法时,它将调用run方法本身。

我们可以通过调用run()方法来做同样的事情。是吗?

就像我们一样:

public class ThreadTest extends Thread{

    public static void main(String[] args) {

        ThreadTest t = new ThreadTest();
        t.run();
    }

}

public class ThreadTest extends Thread{

    public static void main(String[] args) {

        ThreadTest t = new ThreadTest();
        t.start();
    }

}

两者之间有什么区别?

5 个答案:

答案 0 :(得分:2)

run只是一种常规方法。

如果你这样做:

class C {
    public void m() {
        while(true) {}
    }
}
C c = new C();
c.m();
System.out.println("Hello world");

然后无限循环在当前线程上运行," Hello world"从来没有打印过。这与完全相同

class C extends Thread {
    public void run() {
        while(true) {}
    }
}
C c = new C();
c.run();
System.out.println("Hello world");

start是一个特殊的"启动新线程的方法,然后在新线程上调用run

答案 1 :(得分:1)

第一种方法将run()方法称为java中的简单方法调用。

  

只有一个(调用线程)线程正在运行。

但是,t.start();会创建一个新的Thread并调用其run()方法。

  

两个线程( t 并发运行)

答案 2 :(得分:0)

直接调用run()只执行代码synchronously(在同一个线程中),就像普通方法调用一样,而调用start()则执行代码asynchronously

thread.run();

similar

thread.start();
thread.join();

答案 3 :(得分:0)

直接调用run()方法无助于您的事业。它不会产生新的线程。相反,run()方法将在调用方法堆栈(相同的线程)中执行。

Thread.start()的文档声明它启动了一个新线程并且run()方法在内部被调用。

  

使该线程开始执行; Java虚拟机调用   这个线程的run方法。

     

结果是两个线程同时运行:当前   thread(从调用start方法返回)和另一个   线程(执行其run方法)。

答案 4 :(得分:0)

如果在Thread对象上调用start()方法,那将创建一个内部调用run()方法的新线程。
Thread#start

  

使该线程开始执行; Java虚拟机调用此线程的run方法。   结果是两个线程并发运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。

如果你调用run()方法,那么正常方法调用将不会创建新线程。只需要通过当前运行的线程执行run()方法。