什么是在java中实际使用关闭钩子

时间:2016-07-03 05:04:56

标签: java multithreading shutdown-hook

我学习java, 我无法理解在java中实际使用shutdown hook意味着它实际使用的地方吗?

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) {}  
}  
}  

当我搜索它时我得到了这个可以帮助我理解它

2 个答案:

答案 0 :(得分:2)

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

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

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

嗯,这取决于操作系统关闭的方式。如果操作系统有序关闭,那么您可能希望它向所有正在运行的进程发送“SIGTERM”或类似事件,包括运行应用程序的JVM。这通常会触发JVM关闭,应用程序定义的关闭挂钩会运行。

另一方面,如果操作系统紧急关闭,或者你通过循环电源进行了硬重启,那么你就不会期望挂钩运行。

但这是所有特定于操作系统的,并且不受Java控制。

† - 但是保证的关闭挂钩始终运行。 1)其中一个关闭挂钩可能会锁定,阻止其他人运行。 2)有一些方法可以杀死JVM进程,防止关闭挂钩运行。 3)JVM可能会崩溃。 4)CPU的电源可能会消失......

答案 1 :(得分:0)

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