栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java多线程异步调用性能调优

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java多线程异步调用性能调优

出自:

腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后, 我给 老师在课上说的话做了个笔记,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理了一下, 做了个笔记

概述

大型电商公司的支付聚合服务都有这类的场景:

    调用校验服务校验待生成的订单是否合法订单服务生成订单(校验服务和订单服务没有依赖关系)调用1和2,支付服务实现支付核心的功能结合步骤1至3完成支付服务的聚合调用

假如步骤1的耗时5秒,步骤2的耗时3秒,步骤3的耗时2秒,如果你是架构师,要求:

    请实现微服务的同步调用请实现微服务的异步调用(使用CompletableFuture实现)
    比较1和2的性能.
同步调用和异步调用

Future类图

Future的不足

Future直接表述多个Future结果之间的依赖性,有一定的缺陷:

    将两个异步计算合并为一个(第二个异步计算依赖于第一个的结果),这个用Future不太好实现.等待Future集合中的所有的任务都完成
    仅等待Future集合中最快结束的任务完成,并返回它的结果
代码 代码地址

https://gitee.com/zjj19941/mutil-thread/tree/master/src/main/java/com/yrxy/thread/case14

Test
public class Test {

    public static void main(String[] args) {
    	// 同步调用
        long start1 = System.currentTimeMillis();
        PaymentService.syncPay();
        System.out.println("同步支付耗时:" + (System.currentTimeMillis() - start1)+" ms");
        System.out.println("=========================");
        // 异步调用
        long start2 = System.currentTimeMillis();
        PaymentService.asyncPay();
        System.out.println("异步支付耗时:" + (System.currentTimeMillis() - start2)+" ms");
    }

}

PaymentService
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

public class PaymentService {

    
    public static boolean asyncPay() {
        //校验
        CompletableFuture isValid = CompletableFuture.supplyAsync(() -> CheckService.isValid());
        //创建订单
        CompletableFuture orderSum = CompletableFuture.supplyAsync(() -> OrderService.createOrder());
        //支付
        CompletableFuture money = CompletableFuture.supplyAsync(() -> basePay());

        // 上面三个都完成之后,再进行下面匿名内部类的代码
        CompletableFuture.allOf(isValid, orderSum, money)
                .thenRun(() -> System.out.println("完成异步支付"))
                .join();

        return true;

    }

    
    public static boolean syncPay() {
        CheckService.isValid();
        OrderService.createOrder();
        basePay();
        System.out.println("同步支付成功");

        //假设支付成功
        return true;
    }

    public static int basePay() {
        int money = 1000;
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("支付");
        //假设支付成功
        return money;
    }

}

CheckService
import java.util.concurrent.TimeUnit;


public class CheckService {
	
    public static boolean isValid() {
        System.out.println("订单生成前,检验订单是否合法" );
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //假设订单合法,通过校验
        return true;
    }
}

OrderService
import java.util.concurrent.TimeUnit;

public class OrderService {

    public static int createOrder() {
        int orderSum=1;
        System.out.println("生成订单" );
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //假设订单数量为1
        return orderSum;
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号