主线程退出程序终止?

我有两个线程:主线程和主线程生成的线程。

当主线程退出时,整个程序是否会终止?

没有。

当所有非守护进程线程完成时,Java程序将终止。

该文件指出:

当Java虚拟机启动时,通常有一个非守护线程(通常调用一些指定类的main方法)。 Java虚拟机继续执行线程,直到出现以下任一情况:

  • Runtimeexit方法已经被调用,并且安全pipe理器已经允许退出操作发生。
  • 所有不是守护线程的线程都已经死了,要么从调用返回到run方法,要么抛出一个超出run方法的exception。

如果您不希望运行时等待某个线程,请调用setDaemon方法 。

主线程是非恶魔线程,除非你的子线程是恶魔线程,即使主线程在子线程之前完成,程序也不会终止。 你可以使用下面的示例程序来检查。

 public class app { public static void main(String[] args) throws InterruptedException { app2.mt=Thread.currentThread(); app2 t = new app2(); t.start(); System.out.println("Main starts"); Thread.sleep(2000); System.out.println("Main ends"); } } class app2 extends Thread{ static Thread mt; public void run(){ try { mt.join();//waits till main thread dies. } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("child thread"); } }