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

时间:2014-05-26 02:39:15

标签: java multithreading

我一定错过了什么:

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"。

然而,它从未打印过。为什么不?如果我创建了一个单独的线程,它不应该影响我的主执行线程,对吧?

这台机器有四个核心。

2 个答案:

答案 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"
}

线程生命周期的图形表示及其方法

enter image description here

答案 1 :(得分:6)

因为你没有调用start(),所以你直接调用线程run()的实现方法,因此没有启动线程,只执行代码。

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