对守护线程的理解

守护线程:

  1. 为所有⾮守护线程提供服务的线程
  2. 任何⼀个守护线程都是整个JVM中所有⾮守护线程的保姆
  3. 守护线程类似于整个进程的⼀个默默⽆闻的⼩喽喽
  4. 它的⽣死⽆关重要,它却依赖整个进程⽽运⾏
  5. 哪天其他线程结束了,没有要执⾏的了,程序就结束了,理都没理守护线程,就把它中断了

注意:

  1. 由于守护线程的终⽌是⾃身⽆法控制的,因此千万不要把IO、File等重要操作逻辑分配给它
  2. 因为它不靠谱

守护线程的作⽤是什么?

举例

GC垃圾回收线程:
         就是⼀个经典的守护线程,当我们的程序中不再有任何运⾏的Thread,程序就 不会再产⽣垃圾,垃圾回收器也就⽆事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线 程会⾃动离开。它始终在低级别的状态中运⾏,⽤于实时监控和管理系统中的可回收资源。

应⽤场景:

  1. 来为其它线程提供服务⽀持的情况
  2. 或者在任何情况下,程序结束时,这个线程必须正常且⽴刻关闭,就可以作为守护线程来使⽤
  3. 反之,如果⼀个正在执⾏某个操作的线程必须要正确地关闭掉否则就会出现不好的后果的话,那么这个线程就不能是守护线程,⽽是⽤户线程
  4. 通常都是些关键的事务,⽐⽅说,数据库录⼊或者更新,这些操作都是不能中断的。
thread.setDaemon(true)必须在thread.start()之前设置,否则会跑一个IllegalThreadStateException
异常。你不能把正在运⾏的常规线程设置为守护线程。

在Daemon线程中产⽣的新线程也是Daemon的。


守护线程不能⽤于去访问固有资源,⽐如读写操作或者计算逻辑。因为它会在任何时候甚⾄在⼀个操作 的中间发⽣中断。

Java⾃带的多线程框架,⽐如ExecutorService,会将守护线程转换为⽤户线程,所以如果要使⽤后台 线程就不能⽤Java的线程池。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图图是个好孩纸~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值