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) {}
}
}
当我搜索它时我得到了这个可以帮助我理解它
答案 0 :(得分:2)
关闭挂钩的目的是在应用程序关闭时执行操作。
例如,应用程序必须保存状态文件或删除锁定文件作为关闭的一部分...无论如何或为什么关闭正在发生†。
这与关闭操作系统有什么关系?
嗯,这取决于操作系统关闭的方式。如果操作系统有序关闭,那么您可能希望它向所有正在运行的进程发送“SIGTERM”或类似事件,包括运行应用程序的JVM。这通常会触发JVM关闭,应用程序定义的关闭挂钩会运行。
另一方面,如果操作系统紧急关闭,或者你通过循环电源进行了硬重启,那么你就不会期望挂钩运行。
但这是所有特定于操作系统的,并且不受Java控制。
† - 但是保证的关闭挂钩始终运行。 1)其中一个关闭挂钩可能会锁定,阻止其他人运行。 2)有一些方法可以杀死JVM进程,防止关闭挂钩运行。 3)JVM可能会崩溃。 4)CPU的电源可能会消失......
答案 1 :(得分:0)
每当你有一些资源必须在关机时关闭(或释放)。典型示例包括与外部数据库的连接(可能在连接池中),或向用户显示消息(如在帖子中),或文件句柄,或上述任何和所有内容。< / p>