Java中的JVM负责在执行Java程序时创建一个非守护线程。这是正确的吗?如果是,谁负责在Java中创建守护线程?程序员和JVM都创建非守护程序线程?这是正确的吗?寻找一个明确的解释。
提前感谢。
不管是"JVM"还是"程序员"启动了一个线程。当在启动之前调用了setDaemon(true)
时,线程就是守护进程线程,或者守护进程线程在不调用setDaemon
的情况下创建了线程。就是这样。
Thread
的文档中还写道:
当Java虚拟机启动时,通常有一个非守护进程线程(通常调用某个指定类的名为
main
的方法(。
没有责任创建守护进程线程。将线程标记为守护进程只有一个含义,文档将继续解释:
Java虚拟机继续执行线程,直到出现以下任一情况:
- 类
Runtime
的exit
方法已被调用,安全管理器已允许进行退出操作- 所有不是守护进程线程的线程都已死亡,原因可能是从对
run
方法的调用返回,也可能是抛出传播到run
方法之外的异常
所以,这是唯一的含义;非守护进程线程的存在可能会阻止JVM自动终止,而标记为守护进程的线程则不会。