线程池管理工具类

public class ThreadManager {
    /**
     * 通过ThreadPoolExecutor的代理类来对线程池的管理
     */
    public static class ThreadPoolProxy {
        /**
         * 线程池执行者 ,java内部通过该api实现对线程池管理
         */
        private ThreadPoolExecutor poolExecutor;

        private Integer corePoolSize;
        private Integer maximumPoolSize;
        private Long keepAliveTime;
        private Integer boundedQueueSize;

        public ThreadPoolProxy(Integer corePoolSize,
                               Integer maximumPoolSize,
                               Long keepAliveTime,
                               Integer boundedQueueSize) {
            this.corePoolSize = corePoolSize;
            this.maximumPoolSize = maximumPoolSize;
            this.keepAliveTime = keepAliveTime;
            this.boundedQueueSize = boundedQueueSize;
        }

        /**
         * 异步执行方法,
         * 队列排满且超过maximumPoolSize时候抛出RejectedExecutionException异常
         *
         * @param r 待执行方法
         */
        public void execute(Runnable r) {
            if (null == this.poolExecutor || this.poolExecutor.isShutdown()) {
                this.poolExecutor = new ThreadPoolExecutor(
                        this.corePoolSize,
                        this.maximumPoolSize,
                        this.keepAliveTime,
                        TimeUnit.MILLISECONDS,
                        new LinkedBlockingDeque<>(this.boundedQueueSize),
                        Executors.defaultThreadFactory()
                );
            }

            // 执行线程
            this.poolExecutor.execute(r);
        }

    }

    /**
     * 主线程池,核心业务使用
     */
    private volatile static ThreadPoolProxy primaryThreadPoolProxy;

    /**
     * 次要线程池,辅助业务使用
     */
    private volatile static ThreadPoolProxy secondaryThreadPoolProxy;

    /**
     * 主线程业务
     *
     * @return 核心线程池对象
     */
    public static ThreadPoolProxy primaryThreadPoolProxy() {
        if (null != primaryThreadPoolProxy) {
            return primaryThreadPoolProxy;
        }

        synchronized (ThreadPoolProxy.class) {
            if (null == primaryThreadPoolProxy) {
                Integer corePoolSize = 10;
                Integer maximumPoolSize = 80;
                Long keepAliveTime = 30000L;
                Integer boundedQueueSize = 3;
                primaryThreadPoolProxy = new ThreadPoolProxy(corePoolSize,
                        maximumPoolSize,
                        keepAliveTime,
                        boundedQueueSize);
            }
        }

        return primaryThreadPoolProxy;
    }

    /**
     * 次要线程池对象
     *
     * @return 次要线程池对象
     */
    public static ThreadPoolProxy secondaryThreadPoolProxy() {
        if (null != secondaryThreadPoolProxy) {
            return secondaryThreadPoolProxy;
        }

        synchronized (ThreadPoolProxy.class) {
            if (null == secondaryThreadPoolProxy) {
                Integer corePoolSize = 10;
                Integer maximumPoolSize = 50;
                Long keepAliveTime = 30000L;
                Integer boundedQueueSize = 8;
                secondaryThreadPoolProxy = new ThreadPoolProxy(corePoolSize,
                        maximumPoolSize,
                        keepAliveTime,
                        boundedQueueSize);
            }
        }

        return secondaryThreadPoolProxy;
    }

}

异步请求

public void sendHtmlMail(){
ThreadManager.secondaryThreadPoolProxy().execute(()-> {

        要执行的方法代码

});

}