异步编排相关知识

# 配置类 ```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, 执行效率嘎嘎变高, 吞吐量变高