异步线程池、分库分表、读写分离
2. 异步线程池的使用
Why
直接使用@Async的话,每次都会新创建一个线程,当任务很频繁的时候就会出现耗费资源的情况,所以如果任务量大的话,使用线程池
How
-
增加配置类,声明特定@Bean
@Configuration public class AsyncConfig { @Bean("myExecutor") public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(20); executor.setMaxPoolSize(200); executor.setQueueCapacity(500); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("myExecutor-"); return executor; } }
-
使用的时候 @Async(“myExecutor”)就可以了
-
加一个线程流程图
参数说明:
- corePoolSize:线程池维护线程最小数量maxPoolSize:
- 线程池维护线程最大数量
- keepAliveSeconds: **(maxPoolSize-corePoolSize)**部分线程空闲最大存活时间
- queueCapacity:阻塞任务队列
- AllowCoreThreadTimeOut:设置为true的话,keepAliveSeconds参数设置的有效时间对corePoolSize线程也有效
- RejectedExecutionHandler:当提交任务数超过maxmumPoolSize+workQueue之和时,任务会交给RejectedExecutionHandler来处理