我最近需要向我拥有的 Scala 应用程序添加一个关闭挂钩,我发现 Scala 为此提供了一个名为ShutdownHookThread的帮助程序。在其源代码中,我注意到它将新线程设置为守护线程。
def apply(body: => Unit): ShutdownHookThread = {
val t = new ShutdownHookThread(hookName()) {
override def run() = body
}
t setDaemon true // <--------- right here
runtime addShutdownHook t
t
}
为什么这样做?在我看来,您可能希望在关闭挂钩线程中相反(即确保线程在关闭 jvm 之前退出)。还是守护进程/非守护进程与关闭挂钩无关?