spring boot 线程池
程序员文章站
2022-05-01 13:00:47
...
spring boot: 线程池
使用spring boot 线程池需要在主方法
或者controller类
上加上@EnableAsync
注解,开启异步执行
ThreadPoolTaskExecutor, 多线程
@Async
-
@Async
注解会将任务提交到ThreadPoolTaskExecutor
线程池中执行 - 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);
}
上一篇: 线程池的4种拒绝策略
下一篇: jdk_执行jar包
推荐阅读
-
Spring Boot使用过滤器和拦截器分别实现REST接口简易安全认证示例代码详解
-
spring boot项目fat jar瘦身的实现
-
Spring Boot与RabbitMQ结合实现延迟队列的示例
-
Spring boot自定义http反馈状态码详解
-
Spring Boot使用profile如何配置不同环境的配置文件
-
spring boot使用properties定义短信模板的方法教程
-
Spring Boot集成spring-boot-devtools开发时实现热部署的方式
-
详解spring boot应用启动原理分析
-
深入Spring Boot之ClassLoader的继承关系和影响
-
详解基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案