SpringBoot ThreadPoolTaskExecutor异步使用(一)
SpringBoot ThreadPoolTaskExecutor @Async
在SpringBoot
项目中,异步线程池的使用,参数设置,队列拒绝策略;以及对比ForkJoinPool
各场景下的性能。
环境:jdk8、springboot 2.1.6
线程池注入(一)
多线程池注入,用于多个业务场景,避免各业务之间相互影响
package com.mpos.mnp.web.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* Title:
* Description: 线程池
* Copyright: Copyright (c) 2019
* Company: ChinaSteel
*
* @className: BeanConfig
* @author: youcheng
* @create: 2019-08-25 15:56
* @version:1.0
*/
@Configuration
@EnableAsync
public class BeanConfig {
@Bean("taskExecutor")
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(50);
// 设置最大线程数
executor.setMaxPoolSize(200);
// 设置队列容量
executor.setQueueCapacity(20000);
// 设置线程活跃时间(秒)
executor.setKeepAliveSeconds(60);
// 设置默认线程名称
executor.setThreadNamePrefix("mnp-send");
// 设置拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy())