我有一个简单的java程序。一个主线程(main()
)被创建并启动另一个线程t
。java:为什么主线等待子线程完成
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()的主线程中等待子线程。打印后不应该退出主线程结束?
更新:
当Java虚拟机启动时,通常有一个 非守护线程(它通常会调用命名为主要的一些 指定类中的方法)。 Java虚拟机继续直至出现以下任何一种情况发生时执行 主题:Runtime类的
- 退出方法被调用并且安全管理器允许退出操作发生。
- 所有不是守护进程线程的线程都已死亡,可以通过从调用返回运行方法或通过抛出传播超出run方法的异常 。
我找到了原因。第二点澄清了它。我假定所有子线程在主线程退出(我错了)之后会终止,并且JVM应该关闭。
是什么让你觉得主线程没有退出? –
这是一个愚蠢的错误:(@DavidSchwartz –
我应该问为什么JVM而不是主线程 –