zoukankan      html  css  js  c++  java
  • ScheduledExecutorService改为一次性延时任务

    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    import org.apache.log4j.Logger;
    
    /**
     * 一次性延时任务
     *
     * @author shay_deng
     * @since: v1.0
     */
    public class OneTimeScheduledExecutorService {
        private final static Logger logger = Logger.getLogger(OneTimeScheduledExecutorService.class);
                
        private Map<String, ScheduledExecutorService> taskMap = new HashMap<>();
    
        /**
         * 添加一个任务
         *
         * @param taskName
         *            任务名称
         * @param command
         *            任务
         * @param delay
         *            延时时间
         * @param unit
         *            时间单位
         */
        public void schedule(String taskName, Runnable command, long delay, TimeUnit unit) {
            if (!taskMap.containsKey(taskName)) {
                ScheduledExecutorService task = Executors.newScheduledThreadPool(1);
                Runnable run = new Runnable() {
                    public void run() {
    
                        command.run();//要做的事
    
                        if (taskMap.containsKey(taskName)) {// 执行完关闭任务
                            taskMap.get(taskName).shutdownNow();//用完要关掉,要不然占内存
                            taskMap.remove(taskName);
                            logger.info("一次性延时任务 -- >执行完成,删除任务 taskName="+taskName);
                        }
                    }
                };
                task.schedule(run, delay, unit);
                taskMap.put(taskName, task);
                logger.info("一次性延时任务 -- >添加任务 taskName="+taskName);
            }
        }
    
        /**
         * 中途终止任务
         *
         * @param taskName
         *            任务名称
         */
        public void shutdownNow(String taskName) {
            if (taskMap.containsKey(taskName)) {
                taskMap.get(taskName).shutdownNow();
                taskMap.remove(taskName);
                logger.info("一次性延时任务 -- >取消任务 taskName="+taskName);
            }
        }
        
        /**
         * 包含此任务
         *
         * @param taskName
         * @return
         */
        public boolean containsTask(String taskName) {
            return taskMap.containsKey(taskName);
        }
    }

    使用

    /**
     * 检查使用状态
     *
     * @author shay_deng
     * @since: v1.0
     */
    public class CheckUseStatus {
    
        private OneTimeScheduledExecutorService task = new OneTimeScheduledExecutorService();//一次性延时任务
    
        public void checkStatus() {
    
                            if (添加条件) {
                                if (!task.containsTask(taskName)) {
                                    Runnable run = new DelayTask(参数);
                                    long delay = xxx
                                    task.schedule(taskName, run, delay, TimeUnit.MINUTES);
                                }
                            }
                            else {取消
                                if (task.containsTask(taskName)) {
                                    task.shutdownNow(taskName);
                                }
                            }
    
        }
    
        /**
         * 任务
         *
         * @author shay_deng
         * @since: v1.0
         */
        class DelayTask implements Runnable {
    
            public DelayTask(参数) {
    
            }
    
            @Override
            public void run() {
                执行
            }
        }
    }
  • 相关阅读:
    精确计算微信小程序scrollview高度,全机型适配
    精确计算微信小程序scrollview高度,全机型适配
    七牛云赵之健:多维度融合赋能视频 AI 的实践
    javaweb学习总结(四十)——编写自己的JDBC框架
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    深度学习入门笔记(十三):批归一化(Batch Normalization)
    4G EPS 中的 Control Plane
    4G EPS 中建立 eNB 与 MME 之间的 S1 连接
  • 原文地址:https://www.cnblogs.com/RealWorld/p/13410231.html
Copyright © 2011-2022 走看看