SpringBoot 线程池配置 实现AsyncConfigurer接口

6 篇文章 0 订阅
2 篇文章 0 订阅

线程是开发中常用到的,但是如果没有定义线程池,程序不断的创建,销毁线程,需要消耗很多时间,所以我们定义线程池可以减小这部分时间,我来实现AsyncConfigurer来配置线程池,先看看这个接口有什么方法

public interface AsyncConfigurer {

	Executor getAsyncExecutor();
	
	AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler();

}

Executor : 处理异步方法调用时要使用的实例,

AsyncUncaughtExceptionHandler :在使用void返回类型的异步方法执行期间抛出异常时要使用的实例。

实现接口代码如下:

@Configuration
@EnableAsync
@EnableScheduling
public class AsyncConfiguration implements AsyncConfigurer {
   
    private final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class);

    @Override
    @Bean(name = "taskExecutor")
    public Executor getAsyncExecutor() {
        log.debug("Creating Async Task Executor");
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10); //核心线程数
        executor.setMaxPoolSize(20);  //最大线程数
        executor.setQueueCapacity(1000); //队列大小
        executor.setKeepAliveSeconds(300); //线程最大空闲时间 
        executor.setThreadNamePrefix("ics-Executor-"); 指定用于新创建的线程名称的前缀。
        executor.setRejectedExecutionHandler(
		new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
        return new ExceptionHandlingAsyncTaskExecutor(executor);
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new SimpleAsyncUncaughtExceptionHandler();
    }

}

其中我们主要注意的就是拒绝策略方法:setRejectedExecutionHandler(),拒绝策略常用有有这四种

ThreadPoolExecutor.AbortPolicy 丢弃任务并抛出RejectedExecutionException异常(默认)。
ThreadPoolExecutor.DiscardPolic 丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy 丢弃队列最前面的任务,然后重新尝试执行任务
ThreadPoolExecutor.CallerRunsPolic 由调用线程处理该任务

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java SpringBoot提供了丰富的线程池支持。通过使用ThreadPoolTaskExecutor类,可以很方便地创建和管理线程池。ThreadPoolTaskExecutor是在Java中ThreadPoolExecutor的基础上进行封装的。 在启动配置中,SpringBoot默认提供了一个线程池,即@Async。我们也可以自定义线程池来满足特定的需求。自定义线程池可以通过扩展ThreadPoolTaskScheduler和ThreadPoolTaskExecutor类来实现。 使用ThreadPoolTaskExecutor的示例代码如下: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @Configuration public class ThreadPoolConfig implements AsyncConfigurer { @Bean("taskExecutor") public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); // 设置核心线程数 executor.setMaxPoolSize(20); // 设置最大线程数 executor.setQueueCapacity(100); // 设置队列容量 executor.setKeepAliveSeconds(60); // 设置线程空闲时间 executor.setThreadNamePrefix("MyThreadPool-"); // 设置线程名前缀 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 设置拒绝策略 executor.initialize(); // 初始化线程池 return executor; } } ``` 以上代码中,我们通过@Configuration注解将ThreadPoolConfig类标记为配置类,并实现AsyncConfigurer接口。在taskExecutor()方法中,我们创建了一个ThreadPoolTaskExecutor对象,并设置了核心线程数、最大线程数、队列容量、线程空闲时间、线程名前缀和拒绝策略等属性。最后通过调用initialize()方法来初始化线程池。 在使用线程池的地方,可以通过@Autowired注解将taskExecutor注入到需要使用的类中,然后通过调用execute()方法来提交任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值