关于这个问题,我在别的地方查找的结果是这样的。
Java中的线程分为两类:一种是用户线程,一种是守护线程。我们在视频中学习的那些例子里面的线程都是用户线程。
守护线程是一种“在后台提供通用性”的线程,它并不属于程序本体。从字面上容易将守护线程理解成是由虚拟机在内部创建的,而用户线程则是自己所创建的。
事实上并不是这样,任何线程都可以使“守护线程”或“用户线程”。它们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开。
用户线程:Java虚拟机在它所有非守护线程都已经离开后自动离开。
守护线程:守护线程是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去了。
毕老师在视频中用了个很生动的例子就是,圣斗士中星矢、紫龙他们就是守护线程,雅典娜是用户线程,当雅典娜退出时,星矢他们没了可守护的对象也就跟着退出了。
Thread类中setDaemon(boolean on)方法中,参数on为true的话,则将该线程标记为守护线程,参数on为false的话,则将线程标记为用户线程。 |