1. public class ShutdownHook {
  2. private static final ShutdownHook INSTANCE = new ShutdownHook();
  3.  
  4. private List<ExecutorService> executorServices = Lists.newArrayList();
  5. private AtomicBoolean closed = new AtomicBoolean(false);
  6.  
  7. public static ShutdownHook getInstance() {
  8. return INSTANCE;
  9. }
  10.  
  11. private ShutdownHook() {
  12. Runtime.getRuntime().addShutdownHook(new Thread() {
  13. @Override
  14. public void run() {
  15. shutdown();
  16. }
  17. });
  18. }
  19.  
  20. @PreDestroy
  21. public void shutdown() {
  22. if (!closed.compareAndSet(false, true)) {
  23. return;
  24. }
  25. for (ExecutorService executorService : executorServices) {
  26. tryShutdownNow(executorService);
  27. }
  28. }
  29.  
  30. private void tryShutdownNow(ExecutorService executorService) {
  31. try {
  32. executorService.shutdownNow();
  33. } catch (Throwable e) {
  34. //ignore logger maybe has been destroyed
  35. }
  36.  
  37. try {
  38. executorService.awaitTermination(1, TimeUnit.SECONDS);
  39. } catch (InterruptedException e) {
  40. //ignore logger maybe has been destroyed
  41. }
  42. }
  43.  
  44. /**
  45. * 注册executorService
  46. *
  47. * @param executorService
  48. */
  49. public ExecutorService register(ExecutorService executorService) {
  50. this.executorServices.add(executorService);
  51. return executorService;
  52. }
  53. }

为ExecutorService增加shutdown hook的更多相关文章

  1. Java Shutdown Hook 场景使用和源码分析

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 背景 ...

  2. 关闭钩子(shutdown hook)的作用

    DK1.3介绍了java.lang.Runtime class的addShutdownHook()方法.如果你需要在你的程序关闭前采取什么措施,那么关闭钩子(shutdown hook)是很有用的. ...

  3. Java关闭钩子的应用 - Shutdown Hook

    背景 在开发中,遇到这种情况,多个线程同时工作,突然一个线程遇到了fetal的错误,需要立即终止程序,等人工排查解决了问题之后重新启动.但是这样会有一个问题,程序终止时,其他线程可能正在进行重要操作, ...

  4. java的关闭钩子(Shutdown Hook)

    Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...

  5. 关闭钩子(shutdown hook)的作用以及在Tomcat中的使用

    在很多实际应用环境中,当用户关了应用程序时,需要做一些善后清理工作,但问题是,用户有时并不会按照推荐的方法关闭应用程序,很有可能不做清理工作,例如在Tomcat的部署应用中,通过实例化一个Server ...

  6. JAVA虚拟机关闭钩子(Shutdown Hook)

    程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Java.Run ...

  7. ExecutorService对象的shutdown()和shutdownNow()的区别

    可以关闭 ExecutorService,这将导致其拒绝新任务.提供两个方法来关闭 ExecutorService. shutdown() 方法在终止前允许执行以前提交的任务; shutdownNow ...

  8. java中Executor、ExecutorService、ThreadPoolExecutor介绍(转)

    1.Excutor 源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /**     * Executes th ...

  9. java并发编程框架 Executor ExecutorService invokeall

    首先介绍两个重要的接口,Executor和ExecutorService,定义如下: public interface Executor { void execute(Runnable command ...

随机推荐

  1. day73 中间件 以及模板引擎

    模板引擎: 基本实用{{k1}}  if for 模板中自定义函数:操作步骤 1在已经注册的App中创建一个名字叫templates文件夹 2任意创建一个py文件, 3创建名字叫register 的L ...

  2. javaNIO的总结

    放大1.5倍查看 使用NIO对文件进行COPY操作 public class TestNIOCopyFile { public static void main(String[] args) thro ...

  3. 初识Linux系统

    1. pwd 显示现在所在位置 2. ls 显示目录下的文件 ls -a:显示隐藏文件(带 . 的就是隐藏文件): ls -a -l :每个文件夹的详细信息: ls > bbb (把查到的所有文 ...

  4. Django之模板2

    模板2 一 . 母版 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  5. 如何解决Failed to retrieve MSVC Environment from XXXXXXXX

    升级了新版的Qt5.9.3后,本人的电脑也出了这个问题. 最后通过删除了path中的一些错误.多余的环境变量解决了.(删除了一些mysql的环境变量)

  6. BZOJ.3307.雨天的尾巴(dsu on tree/线段树合并)

    BZOJ 洛谷 \(dsu\ on\ tree\).(线段树合并的做法也挺显然不写了) 如果没写过\(dsu\)可以看这里. 对修改操作做一下差分放到对应点上,就成了求每个点子树内出现次数最多的颜色, ...

  7. DFS 算法总结

    DFS 算法总结 这篇文章会对DFS进行一个总结,列举的题目则是从LeetCode上面选的: 适用场景: 有三个方面,分别是输入数据.状态转换图.求解目标: 输入数据:如果是递归数据结构,如单链表,二 ...

  8. getchar getche getch

    转至:https://blog.csdn.net/hairetz/article/details/4161954 (1) getch()和getche()函数     这两个函数都是从键盘上读入一个字 ...

  9. Django restful

    1.restful api的规范 API与用户的通信协议,总是使用HTTPs协议. 域名  https://api.example.com                         尽量将API ...

  10. Tensorflow显示图片

    Tensorflow在处理数据时,经常加载图像数据,有的时候是直接读取文件,有的则是读取二进制文件,为了更好的理解Tensorflow数据处理模式,先简单讲解显示图片机制,就能更好掌握是否读取正确了. ...