钩子例子:
当Java程序非法退出时,这个可以用来在写日志等操作,这样就能知道我什么时候退出的,或者是假死机状态的时候及调用强制结束的时候用。
1.需要一个没启动的线程。
2.调用 Runtime.getRuntime().addShutdownHook(t);
参数:
hook - 一个已初始化但尚未启动的 Thread 对象
抛出:
IllegalArgumentException - 如果指定的挂钩已注册,或者可以确定挂钩正在运行或者已运行完毕
IllegalStateException - 如果虚拟机已经处于关闭进程中
SecurityException - 如果安全管理器存在并且拒绝 RuntimePermission("shutdownHooks")
程序正常退出,这发生在最后的非守护线程退出时,或者在调用 exit(等同于 System.exit)方法时。或者,
为响应用户中断而终止 虚拟机,如键入 ^C;或发生系统事件,比如用户注销或系统关闭。
public class ShutdownDemo {
public ShutdownDemo() {
Thread t = new ShutdownHookThread("Here I am !!!");
Runtime.getRuntime().addShutdownHook(t);
System.out.println("Now shut me down …");
System.exit(0);
while (true) {
System.out.print(".");
try {
Thread.sleep(300);
} catch (InterruptedException ie) {
}
}
}
public static void main(String args[]) {
new ShutdownDemo();
}
}
class ShutdownHookThread extends Thread {
protected String message;
public ShutdownHookThread(String message) {
this.message = message;
}
public void run() {
System.out.println("ShutdownHookThread--");
System.out.println(message);
}
}