java-Runtime鉤子回調

jopen 9年前發布 | 21K 次閱讀 Java Java開發

原文  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();
       }
     });
   }
}

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!