【问题标题】:Daemon And Non-Daemon Threads In JavaJava中的守护线程和非守护线程
【发布时间】:2020-12-02 05:17:56
【问题描述】:

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

提前致谢。

【问题讨论】:

标签: multithreading jvm virtual-machine daemon


【解决方案1】:

“JVM”或“程序员”是否启动线程并不重要。当一个线程在启动之前已经调用了setDaemon(true) 或者一个守护线程在没有调用setDaemon 的情况下创建了该线程时,该线程就是一个守护线程。就是这样。

documentation of Thread 还说:

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

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

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

  • Runtime 类的 exit 方法已被调用,安全管理器已允许执行退出操作。
  • 不是守护线程的所有线程都已死亡,要么从对 run 方法的调用返回,要么抛出传播到 run 方法之外的异常。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2013-03-06
    相关资源
    最近更新 更多