• 使用ScheduledExecutorService实现任务延迟


    在做项目的过程中,遇到一个场景:在审批流中,如果上级领导不审批,则在10分钟后自动审批。也就是要做一个任务在多长时间后执行的效果

    在不断的摸索中,想到了使用线程池,发现有个ScheduledExecutorService可以实现,现将实现过程记录下来

    /**
     * 测试延迟执行任务(只执行一次)
     */
    public class TestScheduledExecutor {
    
        public static void main(String[] args) {
            System.out.println("创建任务时间:" + new Date());
            // 创建一个定长线程池,支持定时及周期性任务执行
            ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
            // 建立一个延时任务,10秒钟之后执行
            ScheduledFuture<String> futrue = executor.schedule(new MyTask("haha"), 10, TimeUnit.SECONDS);
            try {
                // 如果任务执行完成,future.get()方法会返回一个null。注意,future.get()方法会产生阻塞
                System.out.println(futrue.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 当前线程执行完之后,关闭与线程池的连接
            executor.shutdown();
        }
    
    }
    
    class MyTask implements Callable<String> {
    
        private String name;
    
        public MyTask(String name) {
            super();
            this.name = name;
        }
    
        @Override
        public String call() throws Exception {
            System.out.println("任务开始执行时间:" + new Date());
            return name;
        }
    }

    这里设置的是10秒钟之后执行。看下执行效果:

    该任务执行完之后,会有返回值,我们可以通过返回值做其它的逻辑

  • 相关阅读:
    new in swift
    Mac Git [remote rejected] master -> master (pre-receive hook declined) 解决方案
    Mac git 代码的Add 以及提交
    swift storyboard 跳转的2 种方式
    iOS 常用指令(svn cocoa pod)
    java面试题(晨星)
    谈Spring的理解
    软件产品开发文档大纲
    商城项目要点
    金蝶面试小记
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/9640081.html
Copyright © 2020-2023  润新知