zoukankan      html  css  js  c++  java
  • 为ExecutorService增加shutdown hook

    public class ShutdownHook {
        private static final ShutdownHook INSTANCE = new ShutdownHook();
    
        private List<ExecutorService> executorServices = Lists.newArrayList();
        private AtomicBoolean closed = new AtomicBoolean(false);
    
        public static ShutdownHook getInstance() {
            return INSTANCE;
        }
    
        private ShutdownHook() {
            Runtime.getRuntime().addShutdownHook(new Thread() {
                @Override
                public void run() {
                    shutdown();
                }
            });
        }
    
        @PreDestroy
        public void shutdown() {
            if (!closed.compareAndSet(false, true)) {
                return;
            }
            for (ExecutorService executorService : executorServices) {
                tryShutdownNow(executorService);
            }
        }
    
        private void tryShutdownNow(ExecutorService executorService) {
            try {
                executorService.shutdownNow();
            } catch (Throwable e) {
                //ignore logger maybe has been destroyed
            }
    
            try {
                executorService.awaitTermination(1, TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                //ignore logger maybe has been destroyed
            }
        }
    
        /**
         * 注册executorService
         *
         * @param executorService
         */
        public ExecutorService register(ExecutorService executorService) {
            this.executorServices.add(executorService);
            return executorService;
        }
    }
  • 相关阅读:
    Edge 修改使用的默认搜索引擎
    VSCode 插件之
    Visual Studio Code 插件之
    一个随笔
    COGS 2479 偏序 题解
    [NOIP2015] 子串substring 题解
    [CQOI2011]动态逆序对
    树套树三题 题解
    一个随笔
    HEOI 2016 游记
  • 原文地址:https://www.cnblogs.com/frankyou/p/9983301.html
Copyright © 2011-2022 走看看