Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个线程会影响主线程?_Java_Multithreading - Fatal编程技术网

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

Java 为什么这个线程会影响主线程?,java,multithreading,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) {

我一定错过了什么:

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) {

        }
    }
}
我做了一个线程,它应该运行一个循环

在我的主线程中,我打印“废话”

然而,它从未被印刷过。为什么不呢?如果我创建了一个单独的线程,它不会影响我的主执行线程,对吗


这台机器有四个内核。

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

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

调用
start()
而不是
run()
来启动线程

简单地调用
run()
意味着在同一
main
线程中使用无限循环的方法调用,它将阻止在
main
线程中编写的下一条语句

看看


我应该是
(新线程(新操作()).start()
启动一个线程,但仍然会创建一个无限循环,新启动的线程永远不会停止

尝试使用
Thread.currentThread().getName()
再次确认,如下所示:

public void run() {
    System.out.println(Thread.currentThread().getName()); // output "main"
}
螺纹寿命周期及其方法的图示