创建shutdownhook并在java中的同一线程中运行它
我知道我可以添加一个将在新线程中运行的关闭钩子,但是如果可能的话,我如何为当前线程添加一个关闭钩子呢? 我需要一些代码在创建关机挂钩的线程中运行,但我还没有找到答案 编辑:一些背景信息:创建shutdownhook并在java中的同一线程中运行它,java,shutdown-hook,Java,Shutdown Hook,我知道我可以添加一个将在新线程中运行的关闭钩子,但是如果可能的话,我如何为当前线程添加一个关闭钩子呢? 我需要一些代码在创建关机挂钩的线程中运行,但我还没有找到答案 编辑:一些背景信息: 我正在编写一个库,它在创建特定对象时从MS COM接口调用CoInitialize。我希望用户不必关心未初始化COM,因此我认为可以在关闭挂钩中简单地调用conInitialize。但是取消初始化必须从初始化它的线程开始,因此它不能与关闭挂钩一起工作。Runtime.addShutdownHook 注册新的虚拟
我正在编写一个库,它在创建特定对象时从MS COM接口调用CoInitialize。我希望用户不必关心未初始化COM,因此我认为可以在关闭挂钩中简单地调用conInitialize。但是取消初始化必须从初始化它的线程开始,因此它不能与关闭挂钩一起工作。
Runtime.addShutdownHook
注册新的虚拟机关闭挂钩
(我的粗体字,请参见API)
剖析你的问题
[…]如何为当前线程添加关闭挂钩 对于任何给定的线程,都不存在关闭挂钩 您可以简单地编写在
run
实现结束时需要执行的语句,或者在给定线程的run
实现中执行try
(和/或catch
)语句后,使用finally
语句来保证它们的执行
我需要一些代码在创建
关闭
这是一个完全不同的问题。
如果希望在创建关闭挂钩的同一线程内执行,只需在
Runtime.getRuntime().addShutdownHook(someThread)之后添加语句即可代码>语句 关闭进程属于jvm。你的要求似乎不可行。关闭钩子只是jvm在退出之前启动的可运行钩子什么?发展你的问题。如果你想延迟关机,你可以用一段时间。一个最后的块会做你想做的吗?@Andy_Turner不,我正在开发一个库,因此不能强迫用户将所有东西都包装在一个像MS COM这样的try blockCom界面中?你有在java线程中运行的线程吗?他不能将已经运行的线程添加到关机池中。但我可能是wrong@efekctive我不太明白你的问题。。。这种解释的基本原理是什么?阅读he is Comments我不能在addShutdownHook
之后添加语句,因为它们会在添加挂钩后立即运行,但我希望它们在jvm关闭时运行,最后没有试一下block@LPrc但是为什么不直接将它们添加到传递给addShutdownHook
的线程中呢?