使用线程池实现异步调用

背景

处理性能问题发现一个API耗时过长,代码中只有两个处理数据入表以及使用RestTemplate远程调用发送通知。通过日志看到整个insert仅仅用了10毫秒;最终发现RestTemplate远程发送通知耗时远远超过数据库insert耗时。

处理

  1. 因为发送通知为调用其他微服务处理且不需要得到返回值,觉得对发送通知service改造为异步调用
  2. SpringBoot异步注解
    原打算使用Springboot自有@Async和EnableAsync注解来处理,但是原代码中存在循环依赖问题,造成服务无法启动,若使用此方式需要整改的代码过多。
  3. 使用线程池
    线程池也可作为实现异步的一种方式,但是不知道和@Async相比是不是有劣势

3.1. 创建线程池代码

@Configuration
public class ThreadPoolConfig {
  @Bean
  public ExecutorService crawlExecutorPool(){
    return Executors.newSingleThreadExecutor();
  }
}

3.2 . 代码调用

@Resource(name = "crawlExecutorPool")
  private ExecutorService threadExector;
threadExector.execute(new Runnable() {
        @Override
        public void run() {
          // 通知
          infoService.registerPushNotification(assignedPatId, payload, null, true);
        }
      });
  1. 使用CompletableFuture
    CompletableFuture使用并不是非常熟练,还需要继续学习一下!
CompletableFuture.runAsync(() -> {
            // 通知
          infoService.registerPushNotification(assignedPatId, payload, null, true);
        });
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值