Runtime中 shutdown hook的用法
来源:互联网 发布:行知教育 昂立哪个好 编辑:程序博客网 时间:2024/05/20 05:25
根据 Java API, 所谓 shutdown hook 就是已经初始化但尚未开始执行的线程对象。在Runtime 注册后,如果 jvm 要停止前,这些 shutdown hook 便开始执行。声明:Runtime.addShutdownHook(Thread t)
举例如下:
- package john2;
- /**
- * test shutdown hook
- * All rights released and correctness not guaranteed.
- */
- 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 clean up tasks.
- Runtime.getRuntime().addShutdownHook(new Thread(this));
- System.out.println(">>> shutdown hook registered");
- }
- // this method will be executed of course, since it's a Runnable.
- // tasks should not be light and short, accessing database is alright though.
- public void run() {
- System.out.println("/n>>> About to execute: " + ShutdownHook.class.getName() + ".run() to clean up before JVM exits.");
- this.cleanUp();
- System.out.println(">>> Finished execution: " + ShutdownHook.class.getName() + ".run()");
- }
- // (-: a very simple task to execute
- private void cleanUp() {
- for(int i=0; i < 7; i++) {
- System.out.println(i);
- }
- }
- /**
- * there're couple of cases that JVM will exit, according to the Java api doc.
- * typically:
- * 1. method called: System.exit(int)
- * 2. ctrl-C pressed on the console.
- * 3. the last non-daemon thread exits.
- * 4. user logoff or system shutdown.
- * @param args
- */
- public static void main(String[] args) {
- new ShutdownHook();
- System.out.println(">>> Sleeping for 5 seconds, try ctrl-C now if you like.");
- try {
- Thread.sleep(5000); // (-: give u the time to try ctrl-C
- } catch (InterruptedException ie) {
- ie.printStackTrace();
- }
- System.out.println(">>> Slept for 10 seconds and the main thread exited.");
- }
- }
参考资料:
1. Java API Documentation
2. http://java.sun.com/j2se/1.3/docs/guide/lang/hook-design.html
也许有人会担心性能问题,shutdown hook会不会占用太多的VM的资源,答案是shutdown hook不会占用VM太多的资源,因为shutdown hook 只是一个已初始化但尚未启动的线程。这意味着它只在程序关闭的时候才会启动,而不是在程序一开始运行时就启动。而在大多数的Java平台中,如果一个线程没有启动(即没有调用线程的start()函数)VM不会分配资源给线程。因此维护一群没有启动的线程不会给VM带来太大的负担.
最后还要注意以下两点:
1.如果VM crash,那么不能保证关闭挂钩(shutdown hooks)能运行.试想一下如果Windows XP突然蓝屏了那么本来计划在关机之前的更新也就无法进行了.
2.如果调用Runtime.halt()方法来结束程序的话,那么关闭挂钩(shutdown hooks)也不会执行
- Runtime中 shutdown hook的用法
- Shutdown Hook
- Proxool 注册shutdown hook的代码
- java的关闭钩子(Shutdown Hook)
- Eclipse中tomcat关闭时的Failed shutdown of Apache Portable Runtime问题
- runtime hook
- Eclipse中重新启动Tomcat:Failed shutdown of Apache Portable Runtime
- Eclipse中重新启动Tomcat:Failed shutdown of Apache Portable Runtime
- Runtime.getRuntime().addShutdownHook(Thread hook)的使用
- 关于HOOK的用法
- hook的LD_PRELOAD用法
- Java 进程的退出机制与Shutdown hook
- Thread starting during runtime shutdown问题的解决
- shutdown 用法
- WordPress中函数钩子hook的作用及基本用法
- RunTime的一些用法
- Runtime.addShutdownHook的用法
- Runtime 的一些用法
- Oracle 如何找回已经删除了的表
- error C2143: syntax error : missing ';' before 'type'
- APR AJP
- xcode 4.3 debug 不能按行进行的一个解决方案
- C中#if 0 和#if 1
- Runtime中 shutdown hook的用法
- ioctl相关知识
- Notes of the development for apple(todo)
- ood--面向对象设计
- launcher allapps--icon 大小调整
- 套接字
- 中断服务子程序
- 玩转各种Web浏览器——关于几款流行浏览器的测试报告
- java import和package