我正在构建一个 jar 来打开一些进程外资源。(顺便说一句,我必须采用这种方法)。
但是我想要做的是关闭这些资源——理想情况下使用我编写的 jar 中的函数——当虚拟机即将关闭该 jar 时。
我该怎么做呢?我宁愿避免使用 JNI,尽管资源的性质使得我已经将这个 jar 限制在 Windows 中。丑我知道。
我可以可靠地依赖带有终结器的单例吗?
我正在构建一个 jar 来打开一些进程外资源。(顺便说一句,我必须采用这种方法)。
但是我想要做的是关闭这些资源——理想情况下使用我编写的 jar 中的函数——当虚拟机即将关闭该 jar 时。
我该怎么做呢?我宁愿避免使用 JNI,尽管资源的性质使得我已经将这个 jar 限制在 Windows 中。丑我知道。
我可以可靠地依赖带有终结器的单例吗?
你不能依赖终结器,我会使用关闭钩子来代替:
一个非常简单的例子:
Runtime.getRuntime().addShutdownHook(
new Thread() {
public void run() {
//Your shutdown logic here
}
}
);
如果线程内的代码增长,您可能不应该使用匿名类。您可以将所有资源传递给线程并在线程内关闭它们。
更多信息可以在这里找到:http ://waheedtechblog.blogspot.de/2012/03/java-jvm-shutdown-hook-tutorial.html