主线程退出程序终止?

时间:2011-04-12 23:31:33

标签: java

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

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

2 个答案:

答案 0 :(得分:33)

没有

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

documentation州:

  

当Java虚拟机启动时,   通常只有一个非守护进程   线程(通常称为   方法名为main的一些指定   类)。 Java虚拟机   继续执行线程,直到   发生以下任一情况:

     
      
  • 已调用类exit的{​​{1}}方法   安全经理允许   退出行动。
  •   
  • 所有非守护程序线程的线程都已通过返回而死亡   从调用Runtime方法或   通过抛出异常   传播超出run方法。
  •   

如果您不希望运行时等待线程,请调用setDaemon method

答案 1 :(得分:2)

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

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");
  }
}