四、守护线程 deamon

  • 线程分为 User Thread(用户线程)Daemon Thread(守护线程)
  • 虚拟机必须确保用户线程执行完毕
  • 虚拟机不用等待守护线程执行完毕
  • 如:后台记录操作日志、监控內存、垃圾回收等
  • 操作
    • 通过 thread.setDaemon(true) 将线程转换为守护线程,这个方法必须在 thread.start()之前进行调用

1、守护线程简介(摘自)

守护线程的功能非常简单,在其本身是一个线程的同时,主要是为了给其他的线程提供服务,比如说计时器,清空高速缓存等等操作,守护线程具有和被守护线程一样的生命周期(这里并不是说守护线程和被守护线程常常是1对1的关系),当被守护线程死亡,守护线程往往也会死亡,当虚拟机中只剩下守护线程时,虚拟机就会退出,因为此时也没有运行程序的必要了

一个比较通俗的解释:任何一个守护线程都是整个JVM中所有非守护线程的保姆

只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。
守护线程的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者


2、需要注意的点

  • 守护线程的优先级比较低
  • 守护线程要注意考虑关机动作
  • 守护线程应该永远不去访问固有资源,比如说文件或者数据库,因为它会在任何时候甚至一个操作的中间发生中断
  • 不要给守护线程分担读写逻辑或者计算逻辑,因为无法确定守护线程是否已经完成了工作,但是只要User退出守护线程也会立马结束,对于计算机程序来说这样的程序可能多次运行结果不一样,很显然这对于程序来说是毁灭性的

3、CODE

package mii.thread.demo12守护线程;
public class TestDeamon02 {public static void main(String[] args) {// 守护线程Thread deamonThread = new Thread(()->{for (;;){System.out.println(Thread.currentThread().getName() + "__在幕后默默守护着...");try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}, "守护线程");// 用户线程Thread userThread = new Thread(()->{int age = 0;while (age < 100) {age++;System.out.println(Thread.currentThread().getName() + "__已经" + age + "岁了,正在努力奋斗!");try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(Thread.currentThread().getName() + "__挂了!");}, "小明");deamonThread.setDaemon(true); // 默认falsedeamonThread.start();userThread.start();}
}

4、Result

四、守护线程 deamon相关推荐

  1. 多线程----守护线程---Deamon

    public final void setDaemon(boolean on) 守护线程(后台线程) setDaemon(boolean on):将该线程标记为守护线程或者用户线程.当主线程结束,守 ...

  2. 守护线程与线程阻塞的四种情况

    守护线程  Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的 ...

  3. Java并发编程(4):守护线程与线程阻塞的四种情况

    守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的运 ...

  4. 学习java的第四十天,线程的优先级、守护线程、线程同步机制、死锁

    一.线程的优先级(priority) Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行. 线程的优先级用数字表示,范围1~10 Thr ...

  5. 并发编程之多线程基础-守护线程与非守护线程(四)

    守护线程概念: 只要当前JVM实例中尚存在任何一个非守护线程没有结束, 守护线程就全部工作; 只有当最后一个非守护线程结 束时, 守护线程随着 JVM 一同结束工作. 守护线程最典型的应用就是 GC ...

  6. python开发线程:线程守护线程全局解释器锁

    From: https://www.cnblogs.com/jokerbj/p/7460260.html 一 threading模块介绍 multiprocess模块的完全模仿了threading模块 ...

  7. JAVE SE 学习day_09:sleep线程阻塞方法、守护线程、join协调线程同步方法、synchronized关键字解决多线程并发安全问题

    一.sleep线程阻塞方法 static void sleep(long ms) Thread提供的静态方法sleep可以让运行该方法的线程阻塞指定毫秒,超时后线程会自动回到RUNNABLE状态,等待 ...

  8. Python 守护线程

    Python 守护线程 如果你设置一个线程为守护线程,,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出.  如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程 ...

  9. 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁...

    线程(from threading import Thread):CPU调度的最小单位 线程的两种创建方式:方式一: 1 from threading import Thread 2 def f1(i ...

  10. Java线程之守护线程(Daemon) .

    http://blog.csdn.net/mq612/article/details/1520571 守护线程(Daemon) Java有两种Thread:"守护线程Daemon" ...

最新文章

  1. python回归取残差_如何用sklearn拟合线性回归后的残差方差
  2. linux vim 插件管理,linux: vim插件管理
  3. 揭开腾讯IDC节能环保黑科技
  4. 4/100. Maximum Depth of Binary Tree
  5. java 文件上传至oracle blob字段 实现
  6. linux slub分配器浅析
  7. c#中的socket(tcp)
  8. FPGA存储器DDR5简介
  9. mysql ansi unicode_Ansi 与 Unicode 字符串类型的互相转换
  10. btsync多客户端同步的设置
  11. spring boot shiro视频
  12. 黑苹果hidp显示不清楚_bigsur 黑苹果开启HIDPI失败解决方法
  13. : error: control reaches end of non-void function [-Werror=return-type]
  14. LiveMedia视频平台与第三方国标平台级联对接异常断流
  15. 学完教程,不知道接下去从哪里开始做自己的第一个APP,怎么办?酷课堂iOS交流群问答(201902期)
  16. 什么是DirecTV,现在它可以代替您的有线电视订阅吗?
  17. 浅谈数据治理(什么是数据治理)
  18. 中式风格装修,彰显东方迷人的魅力
  19. ARMv8 Cortex-a 编程向导手册学习_2.ARMv8-A 寄存器
  20. 服务熔断 Hystrix

热门文章

  1. 特殊符号大全(建议收藏_复制着用_数学符号最下面)
  2. 成绩录取系统c语言,一个学生成绩管系统C语言源代码.doc
  3. 综合布线双绞线的线序标准568A与568B
  4. Docker 搭建 YApi 可视化接口管理平台
  5. ht for web(图扑)加载模型
  6. 联通4g满格但是网速慢_联通4g网络慢是什么原因 联通4g满格但是网速慢
  7. oeasy教您玩转python - 003 - # - 继续运行
  8. 模拟网络丢包的linux,简述Linux模拟丢包
  9. java setproperty 未生效_Java System类setProperty()方法及示例
  10. LOJ#6070. 「2017 山东一轮集训 Day4」基因 解题报告