• 异步任务工具类


    异步任务工具类

    一个异步任务工具类,可以使用 AsyncManager.me.XXX() 方法开启一个异步任务,底层可以使用 TimerTask 或者 CompletableFuture 或其他异步方式执行方法。

    import cn.hutool.log.Log;
    import cn.hutool.log.LogFactory;
    import org.apache.commons.lang3.concurrent.BasicThreadFactory;
    
    import java.util.TimerTask;
    import java.util.concurrent.*;
    
    public class AsyncManager {
    
        Log log = LogFactory.get();
    
        /**
         * 操作延迟10毫秒
         */
        private final int OPERATE_DELAY_TIME = 10;
    
        /**
         * 异步操作任务调度线程池
         */
        private ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(50,
                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build()) {
            @Override
            protected void afterExecute(Runnable r, Throwable t) {
                super.afterExecute(r, t);
                printException(r, t);
            }
        };
    
        public void printException(Runnable r, Throwable t) {
            if (t == null && r instanceof Future<?>) {
                try {
                    Future<?> future = (Future<?>) r;
                    if (future.isDone()) {
                        future.get();
                    }
                } catch (CancellationException ce) {
                    t = ce;
                } catch (ExecutionException ee) {
                    t = ee.getCause();
                } catch (InterruptedException ie) {
                    Thread.currentThread().interrupt();
                }
            }
            if (t != null) {
                log.error(t.getMessage(), t);
            }
        }
    
        /**
         * 单例模式
         */
        private AsyncManager() {
        }
    
        private static AsyncManager me = new AsyncManager();
    
        public static AsyncManager me() {
            return me;
        }
    
        /**
         * 执行任务
         *
         * @param task 任务
         */
        public void execute(TimerTask task) {
            executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
        }
    
        /**
         * 使用 CompletableFuture 异步执行任务
         * @param runnable 任务
         */
        public CompletableFuture<Void> runAsync(Runnable runnable) {
            return CompletableFuture.runAsync(runnable);
        }
    }
    
    
  • 相关阅读:
    python学习笔记——拾
    python学习笔记——玖
    Python 实现栈与队列
    Vijos1774 机器翻译 [模拟]
    Vijos1788 第K大 [模拟]
    Python 序列求和
    HDU 2102 A计划 DFS与BFS两种写法 [搜索]
    Python 多组输入
    Python 文件读写
    HDU 2068 RPG错排 [错排公式]
  • 原文地址:https://www.cnblogs.com/manastudent/p/15874641.html
Copyright © 2020-2023  润新知