我想创建一个可在我的许多项目中共享的可重用 JAR。在这个 JAR 中,当调用某个方法时,需要创建多个线程。
我希望能够添加一个关闭Runtime.addShutdownHook(...)
钩子main(String[])
(
所以我问:任何 JAR 中的任何方法都可以访问“主”线程并为其添加关闭挂钩吗?如果是这样,怎么做?
我想创建一个可在我的许多项目中共享的可重用 JAR。在这个 JAR 中,当调用某个方法时,需要创建多个线程。
我希望能够添加一个关闭Runtime.addShutdownHook(...)
钩子main(String[])
(
所以我问:任何 JAR 中的任何方法都可以访问“主”线程并为其添加关闭挂钩吗?如果是这样,怎么做?
允许添加关闭挂钩的内容没有限制,因此它应该按照您的意图工作。唯一的限制可能是SecurityManager
阻止您的代码插入钩子。因此,请确保您的项目不使用 aSecurityManager
或您的代码有权添加挂钩。
请注意,当 JVM 被杀死时,您的关闭挂钩可能不会运行。
您无需访问主线程即可添加关闭挂钩,您只需让任何线程调用您的代码,并为调用的代码添加关闭挂钩。
实现此目的的一种方法是在您的类中使用静态初始化程序块。这样,当您的类被加载/调用时,初始化程序将运行并添加您的关闭挂钩。如果您有多个可以调用的类,那么您可能希望创建一个所有类都导入的初始化器类。
或者,更简洁的设计可能是在启动线程时添加关闭挂钩,只需确保验证尚未添加关闭挂钩(AtomicBoolean
应该足以用作检查),因为您不想创建内存泄漏。