应用场景:某个程序发起了N个线程循环不停做某些事情,正常情况下这些线程需要被安全的停止方可保证数据不丢失,如果停电的情况那就没辙,那么有时候需要关闭服务器,那么如何让jvm告诉其内部的程序现在要关闭了呢?答案是使用钩子(hook)
某个线程需要向jvm注册钩子,让jvm在停止的时候通知它,做法是:
WorkThread extend Thread{
class ShutdownCallbackThread extends Thread{
public void run(){flag=false;}//设置关闭筏值
}
private boolean flag=true;
public void run(){
//regist hook
ShutdownCallbackThread hook = new ShutdownCallbackThread();
Runtime.getRuntime().addShutdownHook(hook);
while(flag){
....working;
}
}
}
如此一来,这个线程就可以正常的关闭了。
评论