钩子例子:
当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); } }