学无先后,达者为师

网站首页 编程语言 正文

spring boot 异步async

作者:郭俊强 更新时间: 2023-07-16 编程语言
#### 步骤1:配置线程池
```
@Configuration
@EnableAsync
public class SyncConfiguration {
    @Bean("setOrderInfo")
    public ThreadPoolTaskExecutor getScorePoolTaskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        //核心线程数
        taskExecutor.setCorePoolSize(10);
        //线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程
        taskExecutor.setMaxPoolSize(100);
        //缓存队列
        taskExecutor.setQueueCapacity(50);
        //许的空闲时间,当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
        taskExecutor.setKeepAliveSeconds(200);
        //异步方法内部线程名称
        taskExecutor.setThreadNamePrefix("score-");
        /**
         * 当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略
         * 通常有以下四种策略:
         * ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
         * ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
         * ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
         * ThreadPoolExecutor.CallerRunsPolicy:重试添加当前的任务,自动重复调用 execute() 方法,直到成功
         */
        taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        taskExecutor.initialize();
        return taskExecutor;
    }
}
#### 步骤2: 为@Async指定线程池名字
@Slf4j
@Service
public class Services {
    @Async("setOrderInfo")  //线程池中bean的name值
    public void setOrderInfoMsg(){
        try {
            Thread.sleep(5000);
            log.info("处理订单");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
@RestController
@Slf4j
public class Controll {
    @Autowired
    private Services services;
    @RequestMapping("/hello")
    public String getInfo(){
        this.services.setOrderInfoMsg();
        return "hello";
    }

}

异步写法很简单 :

        1、线程池设置

        2、阻塞线程的方法上加@Async(指定线程名)

        3、调用阻塞线程的方法即可
       

1.注解的方法必须是public方法。
2.方法一定要从另一个类中调用,也就是从类的外部调用,类的内部调用是无效的。

原文链接:https://blog.csdn.net/qq_37061571/article/details/122016478

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新