【发布时间】:2017-07-19 19:57:03
【问题描述】:
我有一个简单的 java 程序。创建一个主线程 (main()) 并启动另一个线程 t。
class T extends Thread{
@Override
public void run() {
while (true){
System.out.println("Inside thread");
}
}
}
public class Main {
public static void main(String[] args) {
Thread t = new T();
t.start();
//t.join();
System.out.println("end");
}
}
输出:
end
Inside thread
Inside thread
Inside thread
....
....
它无限打印内螺纹。我不是在使用 join() 等待主线程中的子线程。打印end后主线程不应该退出吗?
更新:
当 Java 虚拟机启动时,通常有一个 非守护线程(通常调用一些名为 main 的方法 指定类)。 Java 虚拟机继续执行 线程,直到发生以下任一情况:
- 已调用 Runtime 类的退出方法,并且安全管理器已允许执行退出操作。
- 所有不是守护线程的线程都已经死亡,要么是从调用 run 方法返回,要么是抛出异常 传播到 run 方法之外。
我找到了原因。第二点澄清了这一点。我假设所有子线程将在主线程退出后终止(我错了)并且 JVM 应该关闭。
【问题讨论】:
-
是什么让你觉得主线程没有退出?
-
这是一个愚蠢的错误 :( @DavidSchwartz
-
我应该问为什么JVM而不是主线程
标签: java multithreading