• 守护线程


    博客博客,我来写博客,可能会有错误。奥利给!

    守护线程Deamon,它有啥用。

    在《java高并发编程详解》是这样说的:

    守护线程是一类比较特殊的线程,一般用于处理一些后台工作,比如JDK的垃圾回收线程。在正常情况下,若JVM中没有一个非守护线程,则JVM的进程会退出。(看到这一句,心里what?***)

    先了解一下线程的分类,有主线程、用户线程和守护线程(也不知道可不可以这样分,易于理解就行),Java程序入口就是由JVM启动main线程,main线程又可以启动其他线程。当所有线程都运行结束时,JVM退出,进程结束。如果有一个线程没有退出,JVM进程就不会退出。所以,必须保证所有线程都能及时结束。但是有一些线程它就是一直运行,像垃圾回收线程,如果JVM进程的垃圾回收线程是非守护线程,main线程完成工作,JVM无法退出,垃圾回收线程运行着,还在正常的工作,但是我们工作完成了,JVM要退出,所以这个时候守护线程闪亮登场。

    守护线程具备自动结束生命周期的特性。在JVM中,所有非守护线程都执行完毕后,无论有没有守护线程,虚拟机都会自动退出。因此,JVM退出时,不必关心守护线程是否已结束。

    守护线程是指为其他线程服务的线程。常常用作于执行一些后台任务,有时也被称为后台线程。

    下面一个简单的程序,来认识一下,守护线程。

    public class DaemonThread {
        public static void main(String[] args) throws InterruptedException{
            //main线程开始
            Thread thread = new Thread(() ->
            {
              while(true)
              {
                  System.out.println("my thread is running");
                  try
                  {
                      Thread.sleep(500);
                  }catch (InterruptedException e)
                  {
                      e.printStackTrace();
                  }
              }
            });
            thread.setDaemon(true); //将thread设置为守护线程
            thread.start();//启动thread线程
            Thread.sleep(2000);
            System.out.println("Main thread finished lifecycle.");
        }
    }

    控制台结果:

     当我们没有把thread线程设置为守护线程,thread就会一直运行,没人结束它。当我们把thread.setDaemon(true)注释掉,控制台结果:

    参考:《java高并发编程详解》https://www.liaoxuefeng.com/wiki/1252599548343744/1306580788183074
    https://www.jianshu.com/p/6b68af3e5738

  • 相关阅读:
    python3之datetime模块
    python3之time模块
    前端面试题01
    前端面试题02
    angularjs
    nodejs
    android 报错记录
    android知识点回顾二
    android知识点回顾
    Broadcast广播代码例子
  • 原文地址:https://www.cnblogs.com/lhh666/p/12179310.html
Copyright © 2020-2023  润新知