Runtime.addShutdownHook添加钩子

1 方法含义
void java.lang.Runtime.addShutdownHook(Thread hook) 用来在jvm中增加一个关闭的钩子。
当程序正常退出,系统调用System.exit方法或虚拟机被关闭时才会执行添加的shutdownHook线程。其中shutdownHook是一个已初始化但并不有启动的线程,当jvm关闭时会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以可通过这些钩子在jvm关闭的时候进行内存清理、资源回收等工作。

2 示例代码
public class TestRuntimeShutdownHook {
public static void main(String[] args) {

Thread shutdownHookOne = new Thread() {
public void run() {
System.out.println("shutdownHook one...");
}
};
Runtime.getRuntime().addShutdownHook(shutdownHookOne);


Runnable threadOne = new Runnable() {

public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread one doing something...");
}
};

Runnable threadTwo = new Thread() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread two doing something...");
}
};

threadOne.run();
threadTwo.run();
}
}

输出如下:
thread one doing something...
thread two doing something...
shutdownHook one...

原贴地址:http://kim-miao.iteye.com/blog/1662550

时间: 2024-09-20 07:27:40

Runtime.addShutdownHook添加钩子的相关文章

Runtime(动态添加属性)

下面通过一个实例展示一下Runtime(动态添加属性)的用法   下面对运行时添加属性用到的策略参数进行补充: 这样看来,前面的NSString* name用的策略是retain nonatomic就知道为啥了吧. 关于运行时可以 参考学习:http://southpeak.github.io/blog/2014/10/30/objective-c-runtime-yun-xing-shi-zhi-er-:cheng-yuan-bian-liang-yu-shu-xing/

实例讲解Ruby中的钩子方法及对方法调用添加钩子_ruby专题

钩子方法有些类似事件驱动装置,可以在特定的事件发生后执行特定的回调函数,这个回调函数就是钩子方法(更形象的描述: 钩子方法可以像钩子一样,勾住一个特定的事件.),在Rails中before\after函数就是最常见的钩子方法. Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法.默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应. class String def self.inherit

Runtime 方法替换 和 动态添加实例方法 结合使用

前言: 方法替换,可以替换任意外部类的方法,而动态添加方法只能实现在被添加类创建的对象里,但是将方法替换和动态添加方法结合使用,可以实现,对任意外部类动态添加需要的方法,这个方法可以是类方法也可以是实例方法,这个外部类也可以是没有任何方法声明和实现的类. 主要思路: 使用运行时的方法替换将在外部类将自定义方法hy_resolveInstanceMethod或hy_resolveClassMethod(用hy_前缀表示是我自定义的方法)和需要被添加的类中的resolveInstanceMethod

从JDK源码看关闭钩子

关闭钩子 Java提供了Shutdown Hook机制,它让我们在程序正常退出或者发生异常时能有机会做一些清场工作.使用的方法也很简单,Java.Runtime.addShutdownHook(Thread hook)即可.关闭钩子其实可以看成是一个已经初始化了的但还没启动的线程,当JVM关闭时会并发地执行注册的所有关闭钩子. 钩子执行时机 向JVM注册关闭钩子后的什么时候会被调用,什么时候不会被调用呢?分成以下情况: Java程序正常运行完退出时会被调用. windows和linux终端中通过

Runtime 与操作系统交互

java.lang.Runtime 每一个java程序都有一个Runtime类的单一实例,可以通过getRuntime静态方法获得.程序通过它与程序的运行环境(也就是操作系统)相交互. 1.内存查看 int java.lang.Runtime.availableProcessors() jvm的可用处理器数量. long java.lang.Runtime.totalMemory() 初始的总内存,单位为byte. long java.lang.Runtime.maxMemory() 最大可用内

如何向 IBM SmartCloud Entry 添加定制的 REST Web Service

环境准备 一个运行的 SmartCloud Entry 系统 Eclipse 3.6 或者更高版本 揭秘 IBM SmartCloud Entry 如何实现 REST Web Service 开始之前 IBM SmartCloud Entry 并非从一砖一瓦开始构造自己的 REST Web Service,而是借助了一些工具.在正式开始之前,您需要对下列名词有一定的了解. REST: 全称是 Representational state transfer.它是一种 Web 服务的 风格,与作为传

给category添加基本数据类型属性

给category添加基本数据类型属性     说明 通常,我们添加属性都是通过对象扩展来实现的,其实,我们也可以用runtime来添加基本数据类型的属性   源码 // // UIView+AnimationProperty.h // RuntimeCategory // // Created by YouXianMing on 15/7/8. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <UIKit/

java runtime.exec() 的编写详细介绍

那就首先说点Runtime类吧,他是一个与JVM运行时环境有关的类,这个类是Singleton的.我说几个自己觉得重要的地方. 1.Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法. 2.Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法. 3.Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调

Java Runtime 详解

那就首先说点Runtime类吧,他是一个与JVM运行时环境有关的类,这个类是Singleton的.我说几个自己觉得重要的地方. 1.Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法. 2.Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法. 3.Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调