0

我想创建一个可在我的许多项目中共享的可重用 JAR。在这个 JAR 中,当调用某个方法时,需要创建多个线程。

我希望能够添加一个关闭Runtime.addShutdownHook(...)钩子main(String[])

所以我问:任何 JAR 中的任何方法都可以访问“主”线程并为其添加关闭挂钩吗?如果是这样,怎么做?

4

2 回答 2

0

允许添加关闭挂钩的内容没有限制,因此它应该按照您的意图工作。唯一的限制可能是SecurityManager阻止您的代码插入钩子。因此,请确保您的项目不使用 aSecurityManager或您的代码有权添加挂钩。

请注意,当 JVM 被杀死时,您的关闭挂钩可能不会运行。

于 2013-07-04T21:20:18.150 回答
0

您无需访问主线程即可添加关闭挂钩,您只需让任何线程调用您的代码,并为调用的代码添加关闭挂钩。

实现此目的的一种方法是在您的类中使用静态初始化程序块。这样,当您的类被加载/调用时,初始化程序将运行并添加您的关闭挂钩。如果您有多个可以调用的类,那么您可能希望创建一个所有类都导入的初始化器类。

或者,更简洁的设计可能是在启动线程时添加关闭挂钩,只需确保验证尚未添加关闭挂钩(AtomicBoolean应该足以用作检查),因为您不想创建内存泄漏。

于 2013-07-04T21:52:58.860 回答