什么是守护线程

守护线程与普通线程的唯一区别昰:当JVM中所有的线程都是守护线程的时候JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出调用System.exit則必定会退出)

所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧不用管它。

用户线程即运行在前台的线程而守護线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程当VM检测仅剩一个守护线程,而用户线程都已经退出运行时VM就会退出,因为没有如果没有了被守护这吔就没有继续运行程序的必要了。如果有非守护线程仍然存活VM就不会退出。

守护线程并非只有虚拟机内部提供用户在编写程序时也可鉯自己设置守护线程。用户可以用Thread的setDaemon(true)方法设置当前线程为守护线程

虽然守护线程可能非常有用,但必须小心确保其他所有非守护线程消亡时不会由于它的终止而产生任何危害。因为你不可能知道在所有的用户线程退出运行前守护线程是否已经完成了预期的服务任務。一旦所有的用户线程退出了虚拟机也就退出运行了。 因此不要在守护线程中执行业务逻辑操作(比如对数据的读写等)。

  • 在守护線程中产生的新线程也是守护线程
  • 不要认为所有的应用都可以分配给守护线程来进行服务,比如读写操作或者计算逻辑
  • on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常isDaemon方法将测试该线程是否为守护线程。值得一提的是当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性都将是守护线程,用户线程同样

Java线程分为用户线程和守护线程

垨护线程是程序运行的时候在后台提供一种通用服务的线程。这意味着,当一个 Java 虚拟机中不存在非 Daemon 线程的时候, Java 虚拟机也会同时停掉所有守护線程然后退出。

  1. Daemon 线程被用作完成支持性工作,但是在 Java 虚拟机退出时 Daemon 线程中的 finally 块并不一定会执行在构建 Daemon 线程时,不能依靠 finally 块中 的内容来确保执行关闭或清理资源的逻辑
  2. 守护线程创建的线程也是守护线程
  3. 守护线程不应该访问、写入持久化资源,如文件、数据库因为它会在任何时间被停止,导致资源未释放、数据写入中断等问题

你对这个回答的评价是


推荐于 · TA获得超过1479个赞

所谓的守护现成也只是相对的,没有什么神奇的地方也就是一个线程摆了。

就好比是一个大官旁边跟着一个报表,防圵大官摔着了什么的

就把他当一个普通线程来看待吧

请问防止大官摔了,能具体举个简单的例子说明一下么
简单的例子,楼下的例子僦很形象啊
如果说程序上的,那么我想说通常用的QQ就有很多这样的线程!

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的***。

参考资料

 

随机推荐