我有两个线程:主线程和从主线程生成的线程。
当主线程退出时,整个程序会终止吗?
答案 0 :(得分:33)
没有
当所有非守护程序线程完成时,Java程序终止。
当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");
}
}