关于守护线程的知识

守护线程有一个应用场景,就是当主线程结束时,结束其余的子线程(守护线程)自动关闭,就免去了还要继续关闭子线程的麻烦。不过博主推荐,如果真有这种场景,还是用中断的方式实现比较合理。

还有补充一点,不是说当子线程是守护线程,主线程结束,子线程就跟着结束,这里的前提条件是:当前jvm应用实例中没有用户线程继续执行,如果有其他用户线程继续执行,那么后台线程不会中断,如下:

  

public class DaemonThreadTest
{
    public static void main(String[] args)
    {
        Thread mainThread = new Thread(new Runnable(){
            @Override
            public void run()
            {
                Thread childThread = new Thread(new ClildThread());
                childThread.setDaemon(true);
                childThread.start();
                System.out.println("I'm main thread...");
            }
        });
        mainThread.start();
        
        Thread otherThread = new Thread(new Runnable(){
            @Override
            public void run()
            {
                while(true)
                {
                    System.out.println("I'm other user thread...");
                    try
                    {
                        TimeUnit.MILLISECONDS.sleep(1000);
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        });
        otherThread.start();如果把这句注释掉,JVM执行完就会退出
    }
}
 
class ClildThread implements Runnable
{
    @Override
    public void run()
    {
        while(true)
        {
            System.out.println("I'm child thread..");
            try
            {
                TimeUnit.MILLISECONDS.sleep(1000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
}

  我试了,确实守护线程在一直跑。说明守护线程跟启动它的线程没有关系,而是整个JVM还存不存在用户线程。

posted on 2021-01-06 10:39  MaXianZhe  阅读(170)  评论(0编辑  收藏  举报

导航