Scala关机挂钩永远不会运行?

 我是谁的宝贝儿呢颓 发布于 2022-12-11 11:04

斯卡拉多克sys.addShutdownHookshutdown hooks are NOT guaranteed to be run.现在这是完全合理的,因为如果你向JVM发送一个SIGKILL,或者等同于Windows的JVM,JVM很难运行关闭挂钩.

但是添加的关闭钩子sys.addShutdownHook似乎永远不会运行,尽管那些与Runtime.getRuntime.addShutdownHookdo一起运行.

一个测试 -

scala> val t = new Thread { override def run = println("hi!") }
t: java.lang.Thread = Thread[Thread-4,5,main]

scala> Runtime.getRuntime.addShutdownHook(t)

scala> hi!
george@george-MacBook:~$ scala

(跳过启动消息)

scala> val t = new Thread { override def run = println("hi!") }
t: java.lang.Thread = Thread[Thread-4,5,main]

scala> sys.addShutdownHook(t.run _)
res0: scala.sys.ShutdownHookThread = Thread[shutdownHook1,5,main]

scala> george@george-MacBook:~$

文档说"挂钩是自动注册的:返回的值可以被忽略",所以我们不应该添加返回的线程sys.addShutdownHook (并且无论如何都会导致抛出"IllegalArgumentException:Hook之前注册的").

此外,调用addShutdownHook返回的线程上运行似乎没有做任何事情,这是可疑的.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有