1、Runtime.getRuntime#addShutdownHook是面向开发者的 ApplicationShutdownHook#add、Shutdown#add我们都不能直接使用。 2、许多中间件框架也利用addShutdownHook来实现资源回收、清理等操作 比如Spring框架中,使用了ShutdownHook注册,我们常用的@PreDestroy在Bean销毁前执行一些操作,也是借助其回调的。 七、总结 1、...
sm.checkPermission(newRuntimePermission("shutdownHooks")); } ApplicationShutdownHooks.add(hook); } 方法内部调用了ApplicationShutdownHooks#add,我们继续往下看。 2、ApplicationShutdownHooks类 2.1 添加钩子 privatestaticIdentityHashMap<Thread, Thread> hooks;staticsynchronizedvoidadd(Thread hook){if(hooks =...
publicstaticvoidmain(String[]args)throws InterruptedException{Thread thread=newThread(){@Overridepublicvoidrun(){System.out.println("等等我");}};Runtime.getRuntime().addShutdownHook(thread);System.out.println("程序关闭");}输出: 程序关闭 等等我 可以看到,在JVM退出的时候调用,执行了此线程,我们开发...
这时void java.lang.Runtime.addShutdownHook(Thread hook)就派上用场了。下面是addShutdownHook方法的原文说明(部分): Registers a new virtual-machine shutdown hook. The Java virtual machine shuts down in response to two kinds of events: The program exits normally, when the last non-daemon thread ...
接下来,在主程序中获取Runtime对象,并调用其addShutdownHook方法,将步骤 1 中创建的线程实例作为参数传入。 publicclassMain{publicstaticvoidmain(String[]args){ShutdownHookshutdownHook=newShutdownHook();Runtime.getRuntime().addShutdownHook(shutdownHook);// 主程序的逻辑代码// ...}} ...
1、RunTime类 先看一下看源码RunTime#addShutdownHook方法与解释。 1.1 方法解释 核心意思,在Java虚拟机在关闭时会触发一些自己添加的事件。 Registers a new virtual-machine shutdown hook. The Java virtual machine shuts down in response to two kinds of events: ...
钩子线程是通过Runtime.getRuntime().addShutdownHook(Thread hook) 方法来注册的。当 JVM 检测到应用程序即将退出时,就会运行所有注册的钩子线程。 来看一个示例代码: publicclassHookThreadDemo{privatestaticclassHookRunnableimplementsRunnable{@Overridepublicvoidrun(){try{System.out.println("Hook "+Thread.current...
Runtime.getRuntime().addShutdownHook(new Thread(hookRunnable)); // 添加钩子线程 1 Runtime.getRuntime().addShutdownHook(new Thread(hookRunnable)); System.out.println("主线程即将结束执行"); } } 1. 2. 3. 4. 5. 6. 7. 8.
一.Runtime.addShutdownHook理解 在看别人的代码时,发现其中有这个方法,便顺便梳理一下。 void java.lang.Runtime.addShutdownHook(Thread hook) 该方法用来在jvm中增加一个关闭的钩子。当程序正常退出,系统调用 System.exit方法或虚拟机被关闭时才会执行添加的shutdownHook线程。其中shutdownHook是一个已初始化但并...
Runtime#addShutDownHook方法是给虚拟机增加一个虚拟机关闭时的调用钩子,在虚拟机关闭的时候调用这些钩子线程。还是非常有用的一个方法,最直接的用法就是监控了,因为其是在虚拟机临关闭时被调用,所以天生可以记录虚拟机关闭这件事情,及其相关的信息;再就是清理资源什么的,也可以做一个钩子线程,这样就不用再应用中...