下面简单演示一下如何使用Shutdown Hook机制关闭数据库连接。 publicclassDataBaseConnectMain{privatestaticConnectionconn;publicstaticvoidmain(String[]args){System.out.println("The main thread starts executing");// 初始化数据库连接initConnection();System.out.println("Do some data querying and processing");...
A shutdown hookissimply an initialized but unstarted thread.Whenthe virtual machine begins its shutdown sequence it will start all registered shutdown hooksinsome unspecifiedorderandletthem run concurrently.Whenall the hooks have finished it willthenhalt. Note that daemon threads willcontinuetorun durin...
1、Runtime.getRuntime#addShutdownHook是面向开发者的 ApplicationShutdownHook#add、Shutdown#add我们都不能直接使用。 2、许多中间件框架也利用addShutdownHook来实现资源回收、清理等操作 比如Spring框架中,使用了ShutdownHook注册,我们常用的@PreDestroy在Bean销毁前执行一些操作,也是借助其回调的。 七、总结 1、...
ShutdownHook原理 ShutdownHook的数据结构与执行顺序 当我们添加一个ShutdownHook时,会调用ApplicationShutdownHooks.add(hook),往ApplicationShutdownHooks类下的静态变量private static IdentityHashMap<Thread, Thread> hooks添加一个hook,hook本身是一个thread对象 ApplicationShutdownHooks类初始化时会把hooks添加到Shutdow...
ApplicationShutdownHooks位于下标1处,且应用级的hooks,执行时调用的是thread类的start方法,所以应用级的ShutdownHook是异步执行的,但会等所有hook执行完毕才会退出。 staticvoidrunHooks(){ Collection<Thread> threads;synchronized(ApplicationShutdownHooks.class) { ...
使用Shutdown Hook机制非常简单,只需要调用Runtime类的addShutdownHook方法注册一个或多个Hook即可。例如: Runtime.getRuntime().addShutdownHook(new Thread() {public void run() {// 执行清理工作}}); 代码中创建了一个匿名线程,注册了Shutdown Hook,JVM关闭时会执行run()方法中的清理工作。调用Runtime类...
步骤5--> ApplicationShutdownHooks#runHooks 步骤6-->启动添加的hook线程 3) 补充一下 为什么步骤4会调用到步骤5呢? 可以看一下ApplicationShutdownHooks的构造函数,在创建的时候,封装了runHooks方法,放到了Shutdown的钩子集合里。 如此形成闭环,在系统正常退出的时候,最终执行我们添加的hook。
使用Shutdown Hook机制非常简单,只需要调用Runtime类的addShutdownHook方法注册一个或多个Hook即可。例如: 代码语言:javascript 代码运行次数:0 Runtime.getRuntime().addShutdownHook(newThread(){publicvoidrun(){// 执行清理工作}}); 代码中创建了一个匿名线程,注册了Shutdown Hook,JVM关闭时会执行run()方法...
我们所要做的就是编写一个扩展java.lang.Thread类的类,并在public void run()方法中提供我们想要在VM关闭时执行的逻辑。然后我们通过调用Runtime.getRuntime()。addShutdownHook(Thread)方法将此类的实例注册为VM的关闭挂钩。如果需要删除以前注册的关闭挂钩,Runtime类也会提供removeShutdownHook(Thread)方法。
ShutdownHook是什么意思呢,看单词解释“关闭钩子”,addShutdownHook就是添加一个关闭钩子,这个钩子是做什么的呢?能否解决上面的问题? Runtime.getRuntime().addShutdownHook(newThread(()->{//todo})); shutdownHook是一种特殊的结构,它允许开发人员插入JVM关闭时执行的一段代码。这种情况在我们需要做特殊清理操...