我在Scala Future
中有一个2.11
,由Akka的一名工作人员控制。未来由工人执行,工人向中央行为者报告,报告成功/失败并要求更多工作。
工作人员处理的期货是长期运行的,根据任务的复杂程度,计算可能需要15分钟才能完成。在计算中期部署可能会有100%的可能性,我只是让它崩溃。但是,我确实需要进行一些非常小的清理工作,所以我将来会实现以下sys.ShutdownHookThread
:
sys.ShutdownHookThread {
logger.info(s"Computation was killed mid-task for user ${set.userId}. Recovering state...")
closeProcessingState
}
我的问题是这样的:如果我已经注册了一个关闭钩子,它将在未来完成时取消注册吗?检查API文档时,描述说它是“自我取消注册”但它似乎并不表示是什么原因导致它自行注销。
基本上,如果JVM在几小时后关闭,我不希望运行一千个关闭挂钩,因为它们没有自我注销。
答案 0 :(得分:2)
文档并没有说它是"自我注销"。它说:It knows how to unregister itself.
。这意味着您可以在remove
。
ShutdownHookThread
此ShutdownHookThread
只是java.lang.Runtime#addShutdownHook的帮手。看看实施it's quite simple。
换句话说,您有责任取消注册。