A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马振兴 中级黑马   /  2012-10-28 18:43  /  1976 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马振兴 于 2012-10-30 13:15 编辑

为什么要有守护线程?
守护线程起得的是守护的作用吗?
没有守护线程不是一样没啥问题吗?
守护线程有什么用,守护这个概念如何理解呢?

视频里讲了个五小强的例子感觉跟线程没啥关系,不是很明白啊。
哪位高手来说说,最好举个实际应用的例子。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
Java有两种Thread:“守护线程Daemon”与“用户线程User”。
如果没有了用户线程,那么守护线程会就没有了意义,JVM会自动退出
回复 使用道具 举报
感觉毕老师的五小强的例子举得很恰当啊。
如果你在主线程运行A线程,而在主线程内A将自己设置为守护线程,这时候A就是五小强,
主线程是雅典娜,如果主线程执执行完了,五小强(A线程)就不执行了
回复 使用道具 举报
我来说一下我的理解吧。你不要把思维放在守护两个字上,守护线程并不是说这个线程守护了什么。
守护线程就是说当你这个程序其他的线程都结束了,剩下的线程都是守护线程的话就结束这些守护线程
咱直接拿程序的例子来说吧
一个程序是先从主线程,也就是main函数来执行的
现在除了主线程还有两个线程,t1和t2,你把t1设置成守护线程
如果主线程和t2都结束了,那么t1也会结束
如果把t1和t2都设置成守护线程,那么当主线程结束之后,t1和t2就会自动结束了

守护线程的作用:
还是举个例子吧,比如说一个多线程的例子,其中有一个线程所要执行的代码加入了判断,等待等条件,他不能自动结束。那么程序运行之后就不能自动结束了,因为这个线程一直会挂着
这个时候可以把这个线程设置为守护线程,那么当其他的线程执行完之后,这个线程就也会自动结束了
回复 使用道具 举报
Java有两种Thread:“守护线程Daemon”与“用户线程User”。
我们之前看到的例子都是用户,守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。
从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的。事实并不是这样,任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开:
用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马