java-Runtime钩子回调
                 jopen
                 11年前
            
                    原文 http://wangxinchun.iteye.com/blog/2190844
  jvm退出的时候,会通过回调钩子,做退出前的资源清理。 
比如 ExecutorService的shutdown 方法,在关闭tomcat或者jvm退出时调用,能保证已经提交的任务得以执行,如果不调用,那么可能直接退出,导致已经提交的任务也无法执行。
下面这个case说明了钩子使用的场景
public class TaskUtil {    private static Logger logger = LoggerFactory.getLogger(TaskUtil.class.getName());    private static ScheduledExecutorService service = Executors.newScheduledThreadPool(8);    private static void close() {      try {        service.shutdown();      } catch (Exception e) {        try {          service.shutdownNow();        } catch (Exception e1) {          logger.error(e1.getMessage(), e1);        }      }    }    public static void registerTask(BaseTask task,long delay,TimeUnit unit){      service.schedule(task, delay, unit);      logger.info("注册任务:{} 成功", new Object[] {task.getMyTaskName()});    }     static {       Runtime.getRuntime().addShutdownHook(new Thread() {         public void run() {          close();         }       });     }  }