SpringBoot配置多线程(多数据源情况下) - Go语言中文社区

SpringBoot配置多线程(多数据源情况下)


SpringBoot配置多线程运用

SpringBoot配置多线程整体两步走,配置线程池.使用异步处理.

  1. 配置线程池

    在你的项目Configure包中,添加异步配置类.
    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) 线程内注意一下异常,会不会影响导致线程中断的操作.

  2. 使用异步处理

    在使用类或者方法上添加注解 @Async 即可使用
    example

  3. 注意事项

    这里需要注意,线程并不是为所欲为的配置,配置过多,线程切换大大浪费时间并且CPU处理来回切换并没有太大价值.配置太少,CPU一样得不到充分利用.线程的配置仍然是跟随服务器和项目类型变化.合理使用,注意测试.

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_36874292/article/details/92835727
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢