原文地址:https://www.cnblogs.com/wxgblogs/p/5417503.html

详细内容看原文~  ,写的挺好的

在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 。用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。User 和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 因为没有了被守护者,Daemon也就没有工作可做了,也就没有继续运行程序的必要了。值得一提的是,守护线程并非只有虚拟机内部提供,用户在编写程序时也可以自己设置守护线程。下面的方法就是用来设置守护线程的。

这里有几点需要注意:

  • thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程
  • 在Daemon线程中产生的新线程也是Daemon的。
  • 不要认为所有的应用都可以分配给Daemon来进行服务,比如读写操作或者计算逻辑。

  因为你不可能知道在所有的User完成之前,Daemon是否已经完成了预期的服务任务。一旦User退出了,可能大量数据还没有来得及读入或写出,计算任务也可能多次运行结果不一样。这对程序是毁灭性的。造成这个结果理由已经说过了:一旦所有User Thread离开了,虚拟机也就退出运行了。

最新文章

  1. 【记录】ASP.NET MVC View 移动版浏览的奇怪问题
  2. ubuntu执行sudo apt-get update提示缺少公钥
  3. Fragment的生命周期(三)
  4. win7下IE主页无法修改,IE设置无法保存解决方案
  5. 百度 WebUploader 简单入门示例
  6. 用户登录密码RSA加密后传输的实现,非明文密码传输
  7. Windows7下32位IE异常不能打开解决方法
  8. 父类中可继承方法在处理private的一个demo
  9. GG同步sqlserver报错一个案例 Invalid date format
  10. [深度学习工具]·极简安装Dlib人脸识别库
  11. ugui中toggle.isOn的属性笔记
  12. Codeforces Round #530 (Div. 2) F (树形dp+线段树)
  13. 小波学习之二(单层一维离散小波变换DWT的Mallat算法C++实现优化)--转载
  14. 关于xftp上传文件状态错误的解决
  15. class文件打包成jar
  16. UMI开源项目
  17. WPF显示Gif动画
  18. selenium只打开一个浏览器窗口
  19. Android 4 学习(21):对话框
  20. zabbix时间不同步

热门文章

  1. mysql 5.7 学习
  2. centos 安装oracle 11g r2(一)-----软件安装
  3. maven安装及与eclipse集成
  4. ssh免密码登录配置方法
  5. 执行start-dfs.sh后,datenode没有启动的解决办法
  6. C++ 智能指针三
  7. PyCharm设置改变字体大小的快捷键
  8. Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope
  9. 安卓开发笔记——个性化TextView(新浪微博)
  10. [Stats385] Lecture 05: Avoid the curse of dimensionality