根据我的理解,当我调用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();
}
}
两者之间有什么区别?
答案 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()方法。