首页 > 其他分享 >异步配置类

异步配置类

时间:2022-10-07 21:45:37浏览次数:57  
标签:异步 corePoolSize 配置 private 池中 线程 async threadPoolTaskExecutor

@Configuration
@ConditionalOnProperty(value = "guigu.async.enable", havingValue = "true")
@EnableAsync
public class AsyncConfig {

    private static final Logger log = LoggerFactory.getLogger(AsyncConfig.class);

    @Value("${guigu.async.core-pool-size:5}")
    private int corePoolSize;

    @Value("${guigu.async.queue-capacity:10}")
    private int queueCapacity;

    @Value("${guiugu.async.max-pool-size:25}")
    private int maxPoolSize;

    @Value("${guigu.async.keepalive-seconds:10}")
    private int threadTimeout;

    @Primary
    @Bean
    public AsyncTaskExecutor myAsyncExecutor() {
        log.info(">> 初始化spring异步任务线程池 - myAsyncExecutor: coore={},max={},queue={}",
                corePoolSize, maxPoolSize, queueCapacity);
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();

        // 当一个任务通过execute(Runnable)方法欲添加到线程池时:
        // - 若线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也创建新的线程来处理被添加的任务。
        // - 若线程池中的数量等于corePoolSize,但缓冲队列workQueue未满,则任务被放入缓冲队列。
        // - 若线程池中的数量大于corePoolSize,缓冲队列workQueue满,且线程池中的数量小于maximumPoolSize,则创建新线程来处理被添加的任务。
        // - 若线程池中的数量大于corePoolSize,缓冲队列workQueue满,且线程池中的数量等于maximumPoolSize,则通过handler所指定的策略来处理此任务。
        //   即:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,若三者都满,则使用handler处理被拒绝的任务。
        // - 若线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。

        // 线程池维护线程的最少数量
        threadPoolTaskExecutor.setCorePoolSize(corePoolSize);
        // 线程池维护线程的最大数量
        threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize);
        // 线程池所使用的缓冲队列
        threadPoolTaskExecutor.setQueueCapacity(queueCapacity);
        // 线程池维护线程所允许的空闲时间
        threadPoolTaskExecutor.setKeepAliveSeconds(threadTimeout);

        // don't forget to initialize the thread pool
        threadPoolTaskExecutor.initialize();

        return threadPoolTaskExecutor;
    }

    @Bean
    public AsyncUncaughtExceptionHandler myAsyncUncaughtExceptionHandler() {
        return (throwable, method, params) -> {
            String methodName = method.getDeclaringClass().getName() + method.getName();
            log.error(">> 异步执行错误: {}({})", methodName, params, throwable);
        };
    }
}

 使用异步注解

  @Async
    @Scheduled(cron = "* * * * * ?")
    public void hello() throws InterruptedException {
        log.info("hello...");
        Thread.sleep(3000);
    }

 

标签:异步,corePoolSize,配置,private,池中,线程,async,threadPoolTaskExecutor
From: https://www.cnblogs.com/jiutang001/p/16767230.html

相关文章

  • Oracle多实例的配置方法
     SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=PLSExtProc)(ORACLE_HOME=/oracleapp/oracle/product/11.2.0/dbhome_2)(PROGRAM=ext......
  •  Spring的加载过程-配置文件加载过程(一)
    1、原因不知不觉已经从事java开发好几年了,成了人们口中的老司机。但是一直都是恍恍惚惚过来,对于框架底层实现一直都没有怎么了解过,只是在面试的时候背些面试题。慢慢地发......
  • 文件上传和下载bean配置xml
    <!--配置文件上传使用解析器--><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--指定字......
  • [TDD] 如何测试 React 异步组件?
    前言本文承接上文如何测试驱动开发React组件?​,这次我将继续使用@testing-library/react来测试我们的React应用,并简要简要说明如何测试异步组件。异步组件的测试内容......
  • http-server 服务配置跨域
    http-server--cors-p9999http-server--cors-p9999-c-1 长风破浪会有时,直挂云帆济沧海......
  • PyCharm下载安装与基本配置
    pycharm下载安装与基本配置一.pycharm下载与安装pycharm简介PyCharm是一种PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境),带有一整套可以帮助......
  • mac 配置pycharm默认文件头部
    路径Pycharm->Preferences->Editor->FileandCodeTemplates->PythonScript设置信息#-*-coding:utf-8-*-#@Time:${DATE}${TIME}#@Author:xx#@Fil......
  • Spring Boot 2.x基础教程:配置@Async异步任务的线程池
    上一篇我们介绍了如何使用@Async注解来创建异步任务,我可以用这种方法来实现一些并发操作,以加速任务的执行效率。但是,如果只是如前文那样直接简单的创建来使用,可能还是会碰......
  • Ubuntu 22.04LTS静态IP配置及源更新
    Ubuntu22.04LTS静态IP配置及源更新目录Ubuntu22.04LTS静态IP配置及源更新1、网络模式确认2、静态IP配置2-1、切换管理员权限2-2、修改网络配置2-3、生效配置2-4、常用工......
  • 四、OPNSense之接口实操配置
    可关注1、CLI界面2、CLI界面配置接口识别(1)选择1,配置接口标识  DoyouwanttoconfigureLAGGsnow? 是否配置链路聚合本实验选择nDoyouwanttoconfigureV......