为什么这个线程影响主线程?

我肯定错过了什么:

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()是线程内部结构调用来执行任务的方法,因为它只是一个没有附加任何东西的普通方法。