黑马程序员技术交流社区

标题: 关于守护线程setDaemon [打印本页]

作者: 马振兴    时间: 2012-10-28 18:43
标题: 关于守护线程setDaemon
本帖最后由 马振兴 于 2012-10-30 13:15 编辑

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

视频里讲了个五小强的例子感觉跟线程没啥关系,不是很明白啊。
哪位高手来说说,最好举个实际应用的例子。
作者: 李靖    时间: 2012-10-28 20:00
Java有两种Thread:“守护线程Daemon”与“用户线程User”。
如果没有了用户线程,那么守护线程会就没有了意义,JVM会自动退出
作者: 崔政    时间: 2012-10-28 20:02
感觉毕老师的五小强的例子举得很恰当啊。
如果你在主线程运行A线程,而在主线程内A将自己设置为守护线程,这时候A就是五小强,
主线程是雅典娜,如果主线程执执行完了,五小强(A线程)就不执行了
作者: 徐升兴    时间: 2012-10-28 20:11
我来说一下我的理解吧。你不要把思维放在守护两个字上,守护线程并不是说这个线程守护了什么。
守护线程就是说当你这个程序其他的线程都结束了,剩下的线程都是守护线程的话就结束这些守护线程
咱直接拿程序的例子来说吧
一个程序是先从主线程,也就是main函数来执行的
现在除了主线程还有两个线程,t1和t2,你把t1设置成守护线程
如果主线程和t2都结束了,那么t1也会结束
如果把t1和t2都设置成守护线程,那么当主线程结束之后,t1和t2就会自动结束了

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2