猿教程 Logo

关闭钩子(Shutdown Hook)

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

当JVM正常关闭或突然关闭时,关闭钩子可用于执行清除资源或保存状态。 执行清理资源意味着关闭日志文件,发送一些警报或其他信息。 所以如果你想在JVM关闭之前执行一些代码,使用shutdown hook。


JVM什么时候关闭?

  • 用户在命令提示符下按ctrl + c

  • System.exit(int)方法被调用

  • 用户注销

  • 用户关机等。

addShutdownHook(Thread hook)方法

Runtime类的addShutdownHook()方法用于向虚拟机注册线程。 语法:

public void addShutdownHook(Thread hook){}

Runtime类的对象可以通过调用静态工厂方法getRuntime()获得。 例如:

Runtime r = Runtime.getRuntime();

工厂方法

返回类的实例的方法称为工厂方法。


关闭挂钩的简单示例

class MyThread extends Thread{
	public void run(){
		System.out.println("shut down hook task completed..");
	}
}

public class TestShutdown1{
public static void main(String[] args)throws Exception {

Runtime r=Runtime.getRuntime();
r.addShutdownHook(new MyThread());
	
System.out.println("Now main sleeping... press ctrl+c to exit");
try{Thread.sleep(3000);}catch (Exception e) {}
}
}
输出:Now main sleeping... press ctrl+c to exit
       shut down hook task completed..

注:可以通过调用Runtime类的halt(int)方法来停止关闭序列。


通过匿名类实现关闭钩子的示例:

public class TestShutdown2{
public static void main(String[] args)throws Exception {

Runtime r=Runtime.getRuntime();

r.addShutdownHook(new Thread(){
public void run(){
	System.out.println("shut down hook task completed..");
	}
}
);
	
System.out.println("Now main sleeping... press ctrl+c to exit");
try{Thread.sleep(3000);}catch (Exception e) {}
}
}
输出:Now main sleeping... press ctrl+c to exit
       shut down hook task completed..
阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/ShutdownHook-thread.html