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

标签 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”。

但是,它永远不会被打印出来。为什么不?如果我创建一个单独的线程,它应该不会影响我的主执行线程,对吗?

这台机器有四个核心。

最佳答案

调用 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

关于java - 为什么这个线程会影响主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861979/

相关文章:

c# - 等待启动下一个方法或线程,直到后台线程在使用 C# .Net 的 Windows 窗体应用程序中结束

java - Spring 批处理 : starting a job from within a Spring MVC contorller WITH A NEW THREAD

java - 尝试从数组写入对象时出现不可序列化异常

javascript - 无法提取结果集 org.hibernate.exception.SQLGrammarException

java - 将 ArrayList 元素存储在字符串中

java - 如何获得将一个数除以多个数的所有方法?

Java 邮件 - 无法连接到主机

c++ - 不同线程中的 qt 同时 MySQL 查询 = 崩溃

C++ 返回函数 lock_guard

java - tomcat 中有 100 个线程 TIMED_WAITING,导致它在线程总数超过 200 时停止