守护线程简介

xl_echo编辑整理,欢迎转载,转载请声明文章来源。更多IT、编程案例、资料请联系QQ:1280023003,加群298140694。百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!

什么是守护线程?

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

案例解析

1public static void main(String[] args) throws InterruptedException {

2//main线程开始
3、    Thread thread = new Thread(() ->{//自定义一个新的线程
4while (true){
        try{
          Thread.sleep(100);
        }catch (InterruptedException e){
          e.printStackTrace();
        }
      }
    });
5//    thread.setDaemon(true);//将thread设置为守护线程
6、    thread.start();//启动thread线程
7、    Thread.sleep(1000L);
8、    System.out.println("main线程结束");
    //main线程技术
  }

不注释第5行,分析执行结果

  • 当以上程序从main线程开始的时候,执行到第3行,我们新建立的线程得到创建。
  • 创建完成之后,新的线程处于new Thread阶段,这个阶段while循环是不会执行的。
  • 当我们第5部是注释的时候,我们的main线程就直接执行了thread.start();新线程进入就绪状态,等待CPU分配资源。依旧没有执行,但是当我们要继续往下执行的时候,没有特殊情况下,while循环肯定会被执行。
  • while循环执行起来之后,我们整个main线程一直处于阻塞状态。我们新建的线程一直被执行

注释第5行,分析执行结果

  • 当我们将第5部打开之后,我们在执行main线程,结果完全不一样了。
  • 前3散步和上面的分析一样但是执行到第5不之后,我们新的线程成为守护线程,开始执行第4部。
  • 当第四步执行之后,同时间内,main方法不会阻塞,会继续执行第6、7部。
  • 当第7部的休眠结束之后,main执行第8步,线程结束。
  • 但是这个时候我们再观察程序,我们的while循环案例说是死循环,这条线程应该是不会结束的,它应该影响我们的程序,不让程序结束,但是最后结果是,都已经结束了。并且没有jvm退出了。

那么这个时候问题来了。

为什么与我们想象中的不一样,不是应该不管怎么执行什么我们的jvm虚拟机都会一直执行吗?

原因可以来分析一下守护线程的作用。

从上面我们可以看出,如果JVM中都是守护线程,那么我们的JVM会正常退出。
这里我们就可以看到守护线程的一个作用:

守护线程都具备自动结束生命周期的特性

当后台某些程序希望希望多久之后关闭,这是一个拓展的作用。

猜你喜欢

转载自blog.csdn.net/xlecho/article/details/81776214
今日推荐