我一定是遗漏了什么:
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"
}
线程生命周期及其方法的图示
关于java - 为什么这个线程会影响主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861979/