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

Vol*_*ort 3 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) {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个应该运行循环的线程.

在我的主线程中,我打印"Blah".

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

这台机器有四个核心.

Bra*_*raj 11

调用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"
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


Jac*_*ack 6

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

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