创建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
线程中呢?