public static void main(String[] args) { new ShutDownHook(); System.out.println(">>> Sleeping for 5 seconds, try ctrl-C now if you like."); try { System.out.println("jvm run run run"); Thread.sleep(5000); // (-: give u the time to try ctrl-C System.out.println("jvm pre...
package dirk.runtime; public class ShutDownHook implements Runnable { public ShutDownHook() { // register a shutdown hook for this class. // a shutdown hook is an initialzed but not started thread, which will get up and run // when the JVM is about to exit. this is used for short...
removeShutdownHook(java.lang.Thread), halt(int), exit(int) 首先来测试第一种,程序正常退出的情况: packagecom.hook; importjava.util.concurrent.TimeUnit; publicclassHookTest { publicvoidstart() { Runtime.getRuntime().addShutdownHook(newThread(newRunnable() { @Override publicvoidrun() { System...
一.Runtime.addShutdownHook理解 在看别人的代码时,发现其中有这个方法,便顺便梳理一下。 void java.lang.Runtime.addShutdownHook(Thread hook) 该方法用来在jvm中增加一个关闭的钩子。当程序正常退出,系统调用 System.exit方法或虚拟机被关闭时才会执行添加的shutdownHook线程。其中shutdownHook是一个已初始化但并...
今天在开发时,看到如下这段代码: 第一次见到Runtime.getRuntime().addShutdownHook,查了一下资料,原来该方法用来在jvm中增加一个关闭的钩子。当程序正常退出,系统调用 System.exit方法或虚拟机被关闭时才会执行添加的shutdownHook线程。其中shut
上面代码中“Runtime.getRuntime().addShutdownHook”方法就是添加了一个ShutdownHook。这个方法的参数是一个Thread对象,在程序退出时就会执行这个Thread对象了。想看看上面这个例子的执行结果吗?执行结果如上,这是在程序正常运行完成结束时,就会执行Runtime.getRuntime().addShutdownHook方法添加的Thread的内容了。
在Java中,可以使用Runtime类的addShutdownHook()方法来注册一个JVM Shutdown钩子函数。当JVM收到终止...
Runtime.getRuntime().addShutdownHook(newThread(){publicvoidrun(){shutdownGracefully();}}); publicvoidshutdownGracefully(){shutdownThreadPool(streamThreadPool,"main-pool");}/** * 优雅关闭线程池 * @param threadPool * @param alias */privatevoidshutdownThreadPool(ExecutorService threadPool,String...
Shutdown hook是Jvm关闭的钩子,是通过Runtime#addShutdownHook(Thread hook)方法来实现的,根据api是注解可知它就是一系例的已初始化但尚未执行的线程对象。我们可以通过向Jvm注册一个钩子,实现在程序退出时关闭资源、平滑退出的功能。所谓的优雅停机也可以这么搞。
packagecom.hook;importjava.util.concurrent.TimeUnit;publicclassHookTest2{publicvoidstart(){Runtime.getRuntime().addShutdownHook(newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println("Execute Hook...");}}));}publicstaticvoidmain(String[]args){newHookTest().start();System.out....