老大:这个接口返回有点慢,你来优化一下吧(使用Java高并发线程池优化)

处理业务逻辑时,难免会遇到调用几个mapper层接口获取数据进行处理,如果遇到处理方法耗时大且这几个方法没有关联的,可以尝试使用线程池对接口进行优化。

优化接口实战

sevice层:
业务需要统计三个参数的值,分别调用三个mapper方法获取数据,比如数据量大,每个方法耗时5秒,按程序串联执行,这需要15秒完成操作。

		//耗时6秒
		Map<String, Object> user = statMapper.getUser(wallet);
		//耗时5秒
        Map<String, Object> amount = statMapper.getAmount(wallet);
        //耗时4秒
        Map<String, Object> allLog = statMapper.getLog(wallet);
        for (String key : user .keySet()) {
            activity.setUser((Long) user.get(key));
        }
        for (String key : amount .keySet()) {
            activity.setAmount((BigDecimal) amount.get(key));
        }
        for (String key : allLog .keySet()) {
            activity.getLog((Long) allLog .get(key));
        }

以上串行处理完程序需要6+5+4=15秒,现在改用线程池来优化接口,使这几个接口异步进行:

		//创建线程池,默认值赋予3
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        //创建CompletionService接口的实现类,用来处理异步的线程,并且接收返回的结果
        CompletionService completionService = new ExecutorCompletionService<Object>(executorService);
        //耗时6秒
        completionService.submit(() -> statMapper.getUser(wallet));
        //耗时5秒
        completionService.submit(() -> statMapper.getAmount(wallet));
        //耗时4秒
        completionService.submit(() -> statMapper.getLog(wallet));

        executorService.shutdown();
		
        for (int i = 0; i < 3; i++) {
        	//阻塞式获取线程执行完毕的结果
            Map<String, Object> map = (Map<String, Object>) completionService.take().get();
            for (String key : map.keySet()) {
                switch (key) {
                    case "user":
                        activity.setUser((Long) map.get(key));
                        break;
                    case "amount":
                        activity.setAmount((BigDecimal) map.get(key));
                        break;
                    case "allLog":
                        activity.setLog((Long) map.get(key));
                        break;
                }
            }
        }

由于程序异步执行,所以只用时6秒就可以完成操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值