SpringBoot配置多线程运用
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一样得不到充分利用.线程的配置仍然是跟随服务器和项目类型变化.合理使用,注意测试.