【问题标题】:Why does the JVM not wait for daemon threads spawned by user application?为什么 JVM 不等待用户应用程序产生的守护线程?
【发布时间】:2011-12-04 07:31:48
【问题描述】:

如果最后一个非守护线程完成,虚拟机将终止。” 我的问题是,应用程序产生的守护线程会发生什么?为什么 JVM 不等待它们完成?

【问题讨论】:

  • 因为这会破坏守护线程的“特殊”性质。 .NET 更明智地称它们为前台线程(非守护进程)和后台线程(守护进程),其中活动的前台线程(非守护进程)将使 VM 保持活动状态,而后台线程(守护进程)则不会。

标签: java multithreading jvm


【解决方案1】:

守护线程的全部目的是,如果它是唯一运行的线程,它不会不让 JVM 保持活动状态; 这是设计使然。您可能希望这样做的原因有很多。

例如,对于一个 Swing 应用程序,用户可能在后台守护线程(而不是在事件调度线程上)调用了一个长时间运行的任务。在任务完成之前,用户尝试退出应用程序。在这个阶段,应用程序开发人员可能已经决定最好立即关闭应用程序,而不是将关闭尝试延迟到长时间运行的计算完成,因此他们决定分配计算线程守护进程状态。

【讨论】:

  • 但是“守护线程会发生什么”呢?我想什么都不会发生。它只是停止运行......
  • 程序停止执行后守护线程真的停止工作吗?我的意思是这就像说守护线程依赖于主线程的存在。真的是这样吗?
【解决方案2】:

因为它们是守护线程。这就是它的意思。没有别的意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多