主线程退出程序终止?
我有两个线程:主线程和主线程生成的线程。
当主线程退出时,整个程序是否会终止?
没有。
当所有非守护进程线程完成时,Java程序将终止。
该文件指出:
当Java虚拟机启动时,通常有一个非守护线程(通常调用一些指定类的main方法)。 Java虚拟机继续执行线程,直到出现以下任一情况:
- 类
Runtime
的exit
方法已经被调用,并且安全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"); } }