JVM的生命周期

在Java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。但是,Java程序也可以把它创建的任何线程标记为守护线程。

两者唯一的区别之处就在虚拟机的离开:如果非守护线程全部撤离,那么守护线程也就没啥线程好服务的了,所以虚拟机也就退出了。

守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出) 

所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。

 

thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。  

 

假若安全管理器允许,程序本身也能够通过调用Runtime类或者System类的exit()方法来退出。

posted @ 2016-06-29 15:09  SoulCoder  阅读(283)  评论(0)    收藏  举报