社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
SpringBoot配置多线程整体两步走,配置线程池.使用异步处理.
在你的项目Configure包中,添加异步配置类.
具体代码
@Configuration
@EnableAsync
public class AsyncTaskConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(6);// 最小线程数
taskExecutor.setMaxPoolSize(15);// 最大线程数
taskExecutor.setQueueCapacity(300);// 等待队列
taskExecutor.setKeepAliveSeconds(200);// 回收秒数
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());// 超过线程容量,拒绝策略设置
taskExecutor.setThreadNamePrefix("Parse Xml-");
taskExecutor.initialize();
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new SimpleAsyncUncaughtExceptionHandler();
}
}
/**
这里做参数的简要说明:
1.CorePoolSize: 项目线程核心数量
2.MaxPoolSize: 项目支持最大线程数量
3.QueueCapacity:线程队列支持容量
4.RejectedExecutionHandler:当前使用数量超出线程数量极其队列容量,拒绝策略
*/
CorePoolSize,MaxPoolSize等几者关系:直达链接
注意:
想要正确的使用多线程,必须了解这里的参数每一个意义.这里我补充说明一下,线程数量的设置一般为
(1) IO型CPU核数x2 计算型 CPU核数
(2) 拒绝策略请慎重选择,当项目线程数量超过QueueCapacity 会出现任务不处理等现象,具体需要根据设置的拒绝策略.
(3) 线程内注意一下异常,会不会影响导致线程中断的操作.
在使用类或者方法上添加注解 @Async 即可使用
这里需要注意,线程并不是为所欲为的配置,配置过多,线程切换大大浪费时间并且CPU处理来回切换并没有太大价值.配置太少,CPU一样得不到充分利用.线程的配置仍然是跟随服务器和项目类型变化.合理使用,注意测试.
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!