对‘守护线程‘的理解

守护线程

守护线程是为JVM中所有非守护线程提供保姆式服务的线程,而不是专门为某一个(一些)线程专门设置的守护.

守护线程相当于整个jvm中的一个无名小卒,他的生死无关重要,他却依赖整个进行而运行,如果其他的线程都结束了,那么守护线程就没必要执行,程序结束,守护线程就会直接被中断.

由于守护线程的终止是自身无法控制的,因此不能把IO,File等重要的逻辑分配给他,因为他不可靠

守护线程的作用:

举例: GC垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当JVM中仅剩下垃圾回收线程时,垃圾回收线程会被终止.他始终在低级别的状态运行,用于实时监控和管理系统中的可回收资源.

应用:

  1. 为其他线程提供服务支持

  2. 在任何情况下,程序结束时,这个线程必须正常立刻关闭,就可以作为守护线程来使用. 如果一个正在执行某个操作的线程,必须正确的关闭掉,否则会出现一定后果的话,这个线程不能是守护线程,而是用户线程.(通常关键的事务,如:数据库录入或者更新,这些操作不能中断.)

将线程设置为守护线程的方法:

使用thread.setDaemon(true)即可,注意:必须在调用start()方法之前设置,否则会报illegalThreadStateException异常,不能把正在运行的常规线程设置为守护线程.

在守护线程中定义的常规线程也是守护线程.

Java中自带的多线程框架,比如线程池ExecutorService,会将守护线程转化为用户线程,所以如果使用后台守护线程就不能用Java的线程池.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

莽晨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值