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. 调用处理

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

上一篇:Java基础 Java中的类型签名 方法签名


下一篇:java基础面试题,用其他方法改变main类的局部变量