欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring-boot异步线程池

程序员文章站 2022-05-01 14:19:18
...
@Bean("taskExecutor")
    public Executor taskExecutor(){
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        //配置核心线程数
        taskExecutor.setCorePoolSize(100);
        //配置最大线程数
        taskExecutor.setMaxPoolSize(500);
        //配置队列大小
        taskExecutor.setQueueCapacity(200);
        //线程池维护线程所允许的空闲时间
        taskExecutor.setKeepAliveSeconds(60);
        //配置线程池中的线程的名称前缀
        taskExecutor.setThreadNamePrefix("async-service-");
        //当调度器shutdown被调用时等待当前被调度的任务完成
        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        //等待时长
        taskExecutor.setAwaitTerminationSeconds(60);

        /**
         * 第一种AbortPolicy:不执行新任务,直接抛出异常,提示线程池已满
         * 第二种DisCardPolicy:不执行新任务,也不抛出异常
         * 第三种DisCardOldSetPolicy:将消息队列中的第一个任务替换为当前新进来的任务执行
         * 第四种CallerRunsPolicy:直接调用execute来执行当前任务
         */
        taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());

        taskExecutor.initialize();

        return taskExecutor;
    }