• @Async 注解自定义线程池进行使用


    @Async 自定义线程池

    自定义线程池逻辑

    /**
     * @author Greenarrow
     * @date 2023/9/22
     * @description @Async 自定义线程池
     */
    @Component
    @Slf4j
    public class ThreadPoolConfig implements AsyncConfigurer {
    
        /**
         * 阻塞系数 0-1 越大线程数越多
         */
        private static final float BLOCKING_COEFFICIENT = 0.85F;
        /**
         * 默认线程池配置 TODO 可改为配置项
         * @return
         */
        @Override
        @Bean(CommonConstant.ASYNC_EXECUTOR_CUSTOM)
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
            int poolSize = (int) (Runtime.getRuntime().availableProcessors() / (1 - BLOCKING_COEFFICIENT));
            threadPool.setCorePoolSize(poolSize);
            threadPool.setMaxPoolSize(poolSize);
            threadPool.setQueueCapacity(poolSize*2);
            threadPool.setKeepAliveSeconds(60);
            threadPool.setWaitForTasksToCompleteOnShutdown(true);
            threadPool.setAwaitTerminationSeconds(60 * 15);
            threadPool.setThreadNamePrefix("async-task-thread-pool-");
            threadPool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            threadPool.initialize();
           log.info(">>>>>>>>>>>>>>> 开启自定义异步线程池");
            return threadPool;
        }
    
        @Override
        public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
            return new MyAsyncExceptionHandler();
        }
        /**
         * 自定义异常处理类
         *
         *
         */
        static class MyAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
    
            //手动处理捕获的异常
            @Override
            public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
                log.error(">>>>>>>>>>>>>>> 自定义线程池捕获线程异常信息 {}",throwable.toString());
                log.error("Exception message - " + throwable.getMessage());
                log.error("Method name - " + method.getName());
                for (Object param : obj) {
                    log.info("Parameter value - " + param);
                }
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    使用

    @Async(CommonConstant.ASYNC_EXECUTOR_CUSTOM)
    
    • 1

    其他

        /**
         * 自定义线程池名称
         */
        public static final String ASYNC_EXECUTOR_CUSTOM = "async-executor-custom";
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    【算法设计与分析】— —实现最优载的贪心算法
    机器学习实践:基于支持向量机算法对鸢尾花进行分类
    Git使用【下】
    iOS——weak实现原理
    Python之冒泡排序(AI自动写文章项目测试)
    Windows线程
    六、主存储器管理,计算机操作系统教程,第四版,左万利,王英
    java.lang.ClassNotFoundException: freemarker.cache.TemplateLoader
    VSCODE 系列(二)常用插件
    卷积神经网络预测数据值,一维卷积神经网络 keras
  • 原文地址:https://blog.csdn.net/Greenarrow961224/article/details/133760080