码迷,mamicode.com
首页 > 编程语言 > 详细

守护线程和非守护线程

时间:2017-10-07 14:58:15      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:dstat   read   alt   stat   退出   setdeamon   应用   事件   java   

什么是守护线程,什么是非守护线程

用户线程:非守护线程包括常规的用户线程或诸如用于处理GUI事件的事件调度线程,Java虚拟机在它所有非守护线程已经离开后自动离开。

守护线程:守护线程则是用来服务用户线程的,比如说GC线程。如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。

守护线程与用户线程的唯一区别是:其实User Thread线程和Daemon Thread守护线程本质上来说去没啥区别的,唯一的区别之处就在虚拟机的离开,当JVM中所有的线程都是守护线程的时候,JVM就可以退出了(如果User Thread全部撤离,那么Daemon Thread也就没啥线程好服务的了,所以虚拟机也就退出了);如果还有一个或以上的非守护线程则不会退出。

1、thread.setDaemon(true)必须在thread.start()之前设置,你不能把正在运行的常规线程设置为守护线程,否则会跑出一个IllegalThreadStateException异常,如果线程是守护线程,则isDaemon方法返回true

2.不是所有的应用都可以分配给Daemon线程来进行服务,比如读写操作或者计算逻辑。因为在Daemon Thread还没来的及进行操作时,虚拟机可能已经退出了。

守护线程和用户线程本质上没有区别,守护线程可以认为是服务于用户线程的,不会执行和业务相关的计算逻辑和IO操作等工作,因为,用户线程都执行完了,jvm就退出了,有的守护线程就不用执行了。

在thread.start()之前,设置setDeamon(true),就可以了

守护线程和非守护线程

标签:dstat   read   alt   stat   退出   setdeamon   应用   事件   java   

原文地址:http://www.cnblogs.com/hill-tell/p/7634448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!