gpt4 book ai didi

java - 为什么 ShutdownHookThread 'setDaemon true'

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:44 26 4
gpt4 key购买 nike

我最近需要为我的 Scala 应用程序添加一个关闭钩子(Hook),我发现 Scala 为这个应用程序提供了一个名为 ShutdownHookThread 的帮助程序。 .在它的源代码中,我注意到 it sets the new thread to be a daemon thread .

def apply(body: => Unit): ShutdownHookThread = {
val t = new ShutdownHookThread(hookName()) {
override def run() = body
}
t setDaemon true // <--------- right here
runtime addShutdownHook t
t
}

为什么要这样做?在我看来,您可能希望在关闭钩子(Hook)线程中使用相反的方法(即确保线程在关闭 jvm 之前退出)。还是守护进程/非守护进程与关闭 Hook 无关?

最佳答案

在 JVM 上,通常非守护线程会阻止 JVM 终止。一旦不再有任何非守护线程,JVM 将通过启动关闭正常终止。查看addShutdownHook javadoc了解更多信息。

启动关闭后,我不确定守护进程状态是否重要。在启动关闭之前,关闭 Hook 线程也不会启动。所以在这种情况下 t setDaemon true 可能是不必要的,但它也不会造成伤害。

所以简而言之,“守护进程”语义不同于 unix(在 unix 领域,它表示一个保持运行的线程)。

关于java - 为什么 ShutdownHookThread 'setDaemon true',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7768877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com