最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線(xiàn)程異步調(diào)用性能調(diào)優(yōu)方法詳解

 更新時(shí)間:2022年03月07日 11:49:29   作者:張俊杰1994  
這篇文章主要為大家詳細(xì)介紹了Java多線(xiàn)程異步調(diào)用性能調(diào)優(yōu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

概述

大型電商公司的支付聚合服務(wù)都有這類(lèi)的場(chǎng)景:

  • 調(diào)用校驗(yàn)服務(wù)校驗(yàn)待生成的訂單是否合法
  • 訂單服務(wù)生成訂單(校驗(yàn)服務(wù)和訂單服務(wù)沒(méi)有依賴(lài)關(guān)系)
  • 調(diào)用1和2,支付服務(wù)實(shí)現(xiàn)支付核心的功能
  • 結(jié)合步驟1至3完成支付服務(wù)的聚合調(diào)用

?假如步驟1的耗時(shí)5秒,步驟2的耗時(shí)3秒,步驟3的耗時(shí)2秒,如果你是架構(gòu)師,要求:?

1.請(qǐng)實(shí)現(xiàn)微服務(wù)的同步調(diào)用

2.請(qǐng)實(shí)現(xiàn)微服務(wù)的異步調(diào)用(使用CompletableFuture實(shí)現(xiàn))

比較1和2的性能.?

同步調(diào)用和異步調(diào)用

image.png

Future類(lèi)圖

image.png

Future的不足

image.png

Future直接表述多個(gè)Future結(jié)果之間的依賴(lài)性,有一定的缺陷:

1.將兩個(gè)異步計(jì)算合并為一個(gè)(第二個(gè)異步計(jì)算依賴(lài)于第一個(gè)的結(jié)果),這個(gè)用Future不太好實(shí)現(xiàn).

2.等待Future集合中的所有的任務(wù)都完成

僅等待Future集合中最快結(jié)束的任務(wù)完成,并返回它的結(jié)果

代碼

代碼地址

https://gitee.com/zjvngvn/mutil-thread

Test

public class Test {
    public static void main(String[] args) {
    	// 同步調(diào)用
        long start1 = System.currentTimeMillis();
        PaymentService.syncPay();
        System.out.println("同步支付耗時(shí):" + (System.currentTimeMillis() - start1)+" ms");
        System.out.println("=========================");
        // 異步調(diào)用
        long start2 = System.currentTimeMillis();
        PaymentService.asyncPay();
        System.out.println("異步支付耗時(shí):" + (System.currentTimeMillis() - start2)+" ms");
    }
}

PaymentService

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class PaymentService {
    /**
     * 異步支付的入口方法
     *
     * @return
     */
    public static boolean asyncPay() {
        //校驗(yàn)
        CompletableFuture<Boolean> isValid = CompletableFuture.supplyAsync(() -> CheckService.isValid());
        //創(chuàng)建訂單
        CompletableFuture<Integer> orderSum = CompletableFuture.supplyAsync(() -> OrderService.createOrder());
        //支付
        CompletableFuture<Integer> money = CompletableFuture.supplyAsync(() -> basePay());
        // 上面三個(gè)都完成之后,再進(jìn)行下面匿名內(nèi)部類(lèi)的代碼
        CompletableFuture.allOf(isValid, orderSum, money)
                .thenRun(() -> System.out.println("完成異步支付"))
                .join();
        return true;
    }
    /**
     * 同步支付的入口方法
     *
     * @return
     */
    public static boolean syncPay() {
        CheckService.isValid();
        OrderService.createOrder();
        basePay();
        System.out.println("同步支付成功");
        //假設(shè)支付成功
        return true;
    }
    public static int basePay() {
        int money = 1000;
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("支付");
        //假設(shè)支付成功
        return money;
    }
}

CheckService

import java.util.concurrent.TimeUnit;
public class CheckService {
	/**
	 * 返回true說(shuō)明訂單流程才會(huì)往下走
	 */
    public static boolean isValid() {
        System.out.println("訂單生成前,檢驗(yàn)訂單是否合法" );
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //假設(shè)訂單合法,通過(guò)校驗(yàn)
        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();
        }
        //假設(shè)訂單數(shù)量為1
        return orderSum;
    }
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • 一文教你學(xué)會(huì)搭建SpringBoot分布式項(xiàng)目

    一文教你學(xué)會(huì)搭建SpringBoot分布式項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了搭建SpringBoot分布式項(xiàng)目的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • Spring mvc整合mybatis(crud+分頁(yè)插件)操作mysql

    Spring mvc整合mybatis(crud+分頁(yè)插件)操作mysql

    這篇文章主要介紹了Spring mvc整合mybatis(crud+分頁(yè)插件)操作mysql的步驟詳解,需要的朋友可以參考下
    2017-04-04
  • Java反射機(jī)制的適用場(chǎng)景及利弊詳解

    Java反射機(jī)制的適用場(chǎng)景及利弊詳解

    這篇文章主要介紹了Java反射機(jī)制的適用場(chǎng)景及利弊詳解,Spring用到很多反射機(jī)制,在xml文件或者properties里面寫(xiě)好了配置,然后在Java類(lèi)里面解析xml或properties里面的內(nèi)容,得到一個(gè)字符串,然后用反射機(jī)制,需要的朋友可以參考下
    2023-08-08
  • 深入解讀Java代碼組織中的package包結(jié)構(gòu)

    深入解讀Java代碼組織中的package包結(jié)構(gòu)

    這篇文章主要介紹了Java代碼組織中的package包結(jié)構(gòu),是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-03-03
  • Java-Java5.0注解全面解讀

    Java-Java5.0注解全面解讀

    這篇文章主要介紹了Java-Java5.0注解全面解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java實(shí)現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信)

    java實(shí)現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信)

    這篇文章主要介紹了java實(shí)現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 使用Java發(fā)送帶附件的附件的示例

    使用Java發(fā)送帶附件的附件的示例

    這篇文章主要介紹了使用Java發(fā)送帶附件的附件的方法,使用到了JavaMail這個(gè)API,需要的朋友可以參考下
    2015-11-11
  • Java static方法用法實(shí)戰(zhàn)案例總結(jié)

    Java static方法用法實(shí)戰(zhàn)案例總結(jié)

    這篇文章主要介紹了Java static方法用法,結(jié)合具體案例形式總結(jié)分析了java static方法功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • java中對(duì)象為null時(shí)的打印輸出方式

    java中對(duì)象為null時(shí)的打印輸出方式

    這篇文章主要介紹了java中對(duì)象為null時(shí)的打印輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot如何接收數(shù)組參數(shù)的方法

    SpringBoot如何接收數(shù)組參數(shù)的方法

    這篇文章主要介紹了SpringBoot如何接收數(shù)組參數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

永春县| 扬州市| 巴马| 凤庆县| 满洲里市| 宁陵县| 郸城县| 元朗区| 三门县| 兴宁市| 新闻| 方山县| 克什克腾旗| 甘德县| 富阳市| 筠连县| 定襄县| 徐州市| 吉林省| 维西| 曲麻莱县| 吉木萨尔县| 潢川县| 图们市| 乌兰浩特市| 天长市| 公主岭市| 穆棱市| 金昌市| 安宁市| 高密市| 全椒县| 弥渡县| 兴义市| 马边| 海盐县| 昌黎县| 西充县| 山阴县| 衡阳县| 无锡市|