异步编排相关知识
# 配置类
```java
@Configuration
@EnableConfigurationProperties(ThreadPoolProperties.class)
public class ThreadPoolConfig {
@Bean("threadPool")
public ThreadPoolExecutor threadPoolExecutor(ThreadPoolProperties threadPoolProperties) {
return new ThreadPoolExecutor(
threadPoolProperties.getCorePoolSize(),
threadPoolProperties.getMaximumPoolSize(),
threadPoolProperties.getKeepAliveTime(),
TimeUnit.SECONDS, // 秒
new LinkedBlockingDeque<>(100000), // 默认处理10w个线程
Executors.defaultThreadFactory(), // 默认工厂类
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略: 抛异常
);
}
}
```
```java
@ConfigurationProperties("spring.thread.pool")
@Data
public class ThreadPoolProperties {
/**
* 核心线程数
*/
private Integer corePoolSize = 1;
/**
* 最大线程数
*/
private Integer maximumPoolSize = 1;
/**
* 空闲线程最大存活时间
* <b>单位: 秒</b>
*/
private Long keepAliveTime = 1L;
}
```
```yml
thread:
pool:
core-pool-size: 100
maximum-pool-size: 1000
keep-alive-time: 10
```
## 为什么自定义线程池
> 因为默认线程池非常的不好用, 一池一线程, 没有并发, 一吃多线程, 不能扩容, 一池多线程可扩容, 扩容没有度, 导致线程使用过多, CPU调度困难, 导致吞吐量下滑, 因此需要自定义线程池
## 为什么使用异步编排?
> 如果串行化执行, 每一个方法执行的时间是10s, 若干有N个方法, 就要消耗10N秒, 如果使用了异步编排, 理想情况下仅需要10S, 执行效率嘎嘎变高, 吞吐量变高