zoukankan      html  css  js  c++  java
  • spring线程池多线程处理大批量导入场景ThreadPoolUtils

    spring线程池-多线程处理大批量导入场景

    今天在处理繁琐且复杂的课表导入,无论如何在前端或者nginx将超时时间设置多长,都不能解决大批量导入,导致的超时。因此考虑线程池(异步处理任务)。这时接口会提前给到前端,则不会因为后面未执行完任务导致超时。

    1. ThreadPoolUtils 工具类
    点击查看代码
    package xxx.utils;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    /**
     * 线程池工具类
     */
    public class ThreadPoolUtils {
    
        /**
         * 核心线程数,会一直存活,即使没有任务,线程池也会维护线程的最少数量
         */
        private static final int SIZE_CORE_POOL = 5;
        /**
         * 线程池维护线程的最大数量
         */
        private static final int SIZE_MAX_POOL = 10;
        /**
         * 线程池维护线程所允许的空闲时间
         */
        private static final long ALIVE_TIME = 2000;
        /**
         * 线程缓冲队列,当core线程被线程任务占满时,若此时有新的线程任务进来,那么新的线程任务会被排进BlockingQueue<Runnable>队列中
         */
        private static BlockingQueue<Runnable> bqueue = new ArrayBlockingQueue<Runnable>(100);
        private static ThreadPoolExecutor pool = new ThreadPoolExecutor(SIZE_CORE_POOL, SIZE_MAX_POOL, ALIVE_TIME, TimeUnit.MILLISECONDS, bqueue, new ThreadPoolExecutor.CallerRunsPolicy());
    
        private ThreadPoolUtils(){}
        static {
            pool.prestartAllCoreThreads();
        }
    
        public static ThreadPoolExecutor getPool() {
            return pool;
        }
    }
    
    1. 调用处理

    image

  • 相关阅读:
    Mac 终端命令使用自动补全时忽略大小写设置
    Android App专项测试
    评估产品机会
    如何快速获取ListView的打气筒对象
    js处理日期格式yyyy-MM-dd hh:mm:ss
    websocket聊天时,图片压缩处理(url或者input-file)
    canvas图片压缩,局部放大,像素处理
    vscode 右键文件或者文件夹显示菜单
    HTML5-SQLLite连接
    ie下div模拟的表格,表头表体无法对齐
  • 原文地址:https://www.cnblogs.com/heavenTang/p/15759718.html
Copyright © 2011-2022 走看看