JAVA实战细节(二)异步线程池、分库分表、读写分离

tech2023-12-28  76

异步线程池、分库分表、读写分离

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来处理
最新回复(0)