• springboot使用异步线程池


    原文出处 https://www.cnblogs.com/fulongyuanjushi/p/15856660.html

    记录一下自己对异步线程池的使用,全部都是参考的原文。

    1.定义线程池配置类,自定义线程池

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    import java.util.concurrent.Executor;
    import java.util.concurrent.ThreadPoolExecutor;
    
    /**
     * 类名称:ExecutorConfig
     * ********************************
     * <p>
     * 类描述:线程池配置
     *
     * @author guoj
     * @date 2021-09-07 09:00
     */
    @Configuration
    @EnableAsync
    @Slf4j
    public class ExecutorConfig {
        /**
         * 定义线程池
         *
         * @return
         */
        @Bean("noticeExecutor")
        public Executor noticeExecutor() {
    
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    
            // 核心线程数量:当前机器的核心数
            executor.setCorePoolSize(
                    Runtime.getRuntime().availableProcessors());
    
            // 最大线程数
            executor.setMaxPoolSize(
                    Runtime.getRuntime().availableProcessors() * 2);
    
            // 队列大小
            executor.setQueueCapacity(Integer.MAX_VALUE);
    
            // 线程池中的线程名前缀
            executor.setThreadNamePrefix("sjsb-");
    
            // 拒绝策略:直接拒绝
            executor.setRejectedExecutionHandler(
                    new ThreadPoolExecutor.AbortPolicy());
    
            // 执行初始化
            executor.initialize();
    
            return executor;
        }
    
    }

    2.编写异步服务

    @Slf4j
    @Service
    public class AsyncService {
    
    
        /**
         * 异步请求路由下发回调
         *
         */
        @Async("noticeExecutor")
        public void notice(String str) {
    //        log.info("[异步线程] ========进入方法");
           
               //todo
    
    //        log.info("[异步线程] ========执行完毕");
        }
    
    }

    3.代码中的使用

    @Autowired
    AsyncService asyncService;

    asyncService.notice("hello");
  • 相关阅读:
    单核时代,PHP之类多线程或者多进程的,是怎么处理并发的?是排队吗?
    高并发下的Node.js与负载均衡
    telnet 查看端口是否可访问
    同步与异步--
    函数式编程沉思录(草稿)
    面向状态机编程
    promise是有状态的moand
    异步链式编程—promise沉思录
    同步与异步
    网络编程释疑之:同步,异步,阻塞,非阻塞
  • 原文地址:https://www.cnblogs.com/runwithraining/p/16442206.html
Copyright © 2020-2023  润新知