java 中关闭挂钩的实际用途是什么

what is tha actuall use of shut down hook in java

我正在学习java, 我无法理解 java 中关闭挂钩的实际使用意味着它实际使用的位置?

class MyThread extends Thread{  
    public void run(){  
        System.out.println("shut down hook task completed..");  
    }  
}  

public class Shutdown {  
public static void main(String[] args)throws Exception {  

Runtime r=Runtime.getRuntime();  
r.addShutdownHook(new MyThread());  

System.out.println("Now main sleeping... press ctrl+c to exit");  
try{Thread.sleep(3000);}catch (Exception e) {}  
}  
}  

我在搜索时得到了这个,谁能帮助我理解它

每当您有一些资源必须在关机时关闭(或释放)。典型示例包括与外部数据库的连接(可能在 连接池 中),或向用户显示消息(如在您的 post 中),或文件句柄,或任何以及以上所有内容。

关闭挂钩的目的是在您的应用程序关闭时执行操作。

例如,作为关闭的一部分,应用程序必须保存状态文件或删除锁定文件......无论如何为什么 关机发生了


这与操作系统关闭有什么关系?

嗯,这取决于如何操作系统关闭。如果 OS 执行有序关闭,那么您会期望它向所有 运行ning 进程发送 "SIGTERM" 或类似事件,包括 JVM 运行ning 您的应用。这通常会触发 JVM 关闭,应用程序定义的关闭挂钩会 运行。

另一方面,如果 OS 进行了紧急关机,或者如果您通过重启电源进行了硬重启,那么您不会期望挂钩 运行。

但这都是 OS 特有的,不在 Java 的控制范围内。


† - 但是关闭钩子并不保证总是运行。 1) 其中一个关闭挂钩可能会锁定,从而阻止其他挂钩 运行ning。 2) 有一些方法可以终止 JVM 进程,从而防止 运行ning 关闭挂钩。 3) JVM 可能会严重崩溃。 4) CPU 的电源可能会关闭....