我一定错过了什么:
public class Test {
public static void main(String[] args) {
(new Thread(new Action())).run();
System.out.println("Blah");
}
}
class Action implements Runnable {
public void run() {
while (true) {
}
}
}
我创建了一个应该运行循环的线程。
在我的主要帖子中,我打印" Blah"。
然而,它从未打印过。为什么不?如果我创建了一个单独的线程,它不应该影响我的主执行线程,对吧?
这台机器有四个核心。
答案 0 :(得分:11)
调用start()
而不是run()
来启动一个帖子。
简单地调用run()
意味着在同一个main
线程中使用无限循环的方法调用将阻止在main
线程中编写的下一个语句。
查看Java Tutorial on Defining and Starting a Thread
我应该(new Thread(new Action())).start();
启动一个线程,但它仍会创建一个无限循环,新启动的线程永远不会停止。
再次尝试使用Thread.currentThread().getName()
确认,如下所示:
public void run() {
System.out.println(Thread.currentThread().getName()); // output "main"
}
答案 1 :(得分:6)
因为你没有调用start()
,所以你直接调用线程run()
的实现方法,因此没有启动线程,只执行代码。
run()
是线程内部结构调用来执行任务的方法,因为它只是一个没有附加任何东西的普通方法。