• 使用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秒钟之后执行。看下执行效果:

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

  • 相关阅读:
    Flume下读取kafka数据后再打把数据输出到kafka,利用拦截器解决topic覆盖问题
    idea 党用快捷键
    Idea 调试快捷键
    log4j实时将数据写入到kafka,Demo和相关的配置详解
    windows环境下,kafka常用命令
    ElasticSearch 基本概念
    elasticsearch REST API方式批量插入数据
    自提柜-资产管理柜
    10.智能快递柜(源码下载)
    9.智能快递柜SDK(串口型锁板)
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/9640081.html
Copyright © 2020-2023  润新知