Spring Boot 线程池

本文介绍了如何在SpringBoot中使用ThreadPoolTaskExecutor进行线程池配置和异步任务处理。通过@EnableAsync开启异步支持,@Async注解标记方法以异步执行。配置包括核心线程数、最大线程数、队列容量和线程命名前缀,并讨论了拒绝策略。同时展示了如何手动利用线程池执行异步任务,以及如何在application.properties文件中调整线程池参数。
摘要由CSDN通过智能技术生成

Spring Boot: 线程池

使用Spring Boot 线程池需要在主方法或者controller类上加上@EnableAsync注解,开启异步执行

ThreadPoolTaskExecutor, 多线程

@Async

  1. @Async 注解会将任务提交到ThreadPoolTaskExecutor线程池中执行
  2. value 指定使用哪个线程池

config文件中配置

executor.setCorePoolSize(16); //配置核心线程数
executor.setMaxPoolSize(64);  //配置最大线程数
executor.setQueueCapacity(9999); //配置队列大小
executor.setThreadNamePrefix("async-order-");
//配置线程池中的线程的名称前缀 (指定一下线程名的前缀)
        // rejection-policy:当pool已经达到max pool size的时候,如何处理新任务
        // CALLER_RUNS:不在新线程中执行任务,而是由调用线程(提交任务的线程)处理该任务
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//拒绝策略:
/*1.DiscardOldestPolicy    超出线程池直接丢弃比较老的线程
  2.AbortPolicy        超出大小抛出异常
  3.CallerRunsPolicy      直接在当前线程中运行此任务,不拒绝
  4.DiscardPolicy   超多线程池大小直接丢弃
他们都实现了RejectedExecutionHandler接口
拒绝策略通常是自定义实现的
*/
executor.initialize();//执行初始化

application属性配合文件中配置

修改线程池默认参数

spring.task.execution.pool.max-size=99999
#配置最大线程数
spring.task.execution.thread-name-prefix=pay-task-
#线程池前缀名称
spring.task.execution.pool.queue-capacity=99999
#配置队列大小

不用 @Async注解,我们手动利用线程池编程异步处理

 @Autowired
private ThreadPoolTaskExecutor applicationTaskExecutor;
//将applicationTaskExecutor自动注入到spring容器中
 for (int i = 0; i < 1000; i++) {
            //并发处理
            Future<String> future = applicationTaskExecutor.submit(() -> {
                String result = SMS.sendSMS("线程池执行");
                return result;
            });
            futures.add(future);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值