Java中的守护程序和非守护程序线程


Java中的JVM负责在执行Java程序时创建一个非守护线程。这是正确的吗?如果是,谁负责在Java中创建守护线程?程序员和JVM都创建非守护程序线程?这是正确的吗?寻找一个明确的解释。

提前感谢。

不管是"JVM"还是"程序员"启动了一个线程。当在启动之前调用了setDaemon(true)时,线程就是守护进程线程,或者守护进程线程在不调用setDaemon的情况下创建了线程。就是这样。

Thread的文档中还写道:

当Java虚拟机启动时,通常有一个非守护进程线程(通常调用某个指定类的名为main的方法(。

没有责任创建守护进程线程。将线程标记为守护进程只有一个含义,文档将继续解释:

Java虚拟机继续执行线程,直到出现以下任一情况:

  • Runtimeexit方法已被调用,安全管理器已允许进行退出操作
  • 所有不是守护进程线程的线程都已死亡,原因可能是从对run方法的调用返回,也可能是抛出传播到run方法之外的异常

所以,这是唯一的含义;非守护进程线程的存在可能会阻止JVM自动终止,而标记为守护进程的线程则不会。

最新更新