为什么这个线程影响主线程?
我肯定错过了什么:
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”。
但是,从不打印。 为什么不? 如果我创建了一个单独的线程,它不应该影响我的主执行线程,对吧?
这台机器有四个核心。
调用start()
而不是run()
来启动一个线程。
简单地调用run()
意味着在同一个main
线程中使用无限循环的方法调用将阻止在main
线程中写入的下一个语句。
看看定义和启动线程的Java教程
我应该(new Thread(new Action())).start();
启动一个线程,但它仍然会创建一个无限循环,新启动的线程永远不会停止。
尝试使用Thread.currentThread().getName()
再次确认它,如下所示:
public void run() { System.out.println(Thread.currentThread().getName()); // output "main" }
线程生命周期的图形表示及其方法
因为你没有调用start()
,所以你直接调用线程run()
的实现方法,因此没有启动线程,只执行代码。
run()
是线程内部结构调用来执行任务的方法,因为它只是一个没有附加任何东西的普通方法。