参考
Java中的父线程与子线程
守护线程与守护进程
主线程与子线程生命周期没关系
Son.java
public class Son extends Thread {
private Thread parent;
public Son(Thread parent) {
this.parent = parent;
}
@Override
public void run() {
while (true) {
System.out.println("thread say");
try {
Thread.sleep(1000);
System.out.println(parent.isAlive());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
复制
Main.java
public class Main {
public static void main(String[] args) {
Son son = new Son(Thread.currentThread());
son.start();
System.out.println("main thread ending");
}
}
复制
运行
Main
可得到以下结果:
可以看到,主线程结束
main
方法后即死亡,而子线程依旧存活。
结论
- 主进程在其代码结束后,守护进程在此时被回收,然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束。
- 主线程与子线程的生命周期没有关系。主线程结束运行后,子线程继续运行。所有非守护线程死亡后,守护线程被强制结束。