天天看点

父子进程 父子线程 守护线程参考主线程与子线程生命周期没关系结论

参考

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

方法后即死亡,而子线程依旧存活。

结论

  1. 主进程在其代码结束后,守护进程在此时被回收,然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束。
  2. 主线程与子线程的生命周期没有关系。主线程结束运行后,子线程继续运行。所有非守护线程死亡后,守护线程被强制结束。