java 线程异步调用,多线程的异步调用怎么实现的

  java 线程异步调用,多线程的异步调用怎么实现的

  

目录

概述同步调用和异步调用将来的类图将来的的不足代码代码地址TestPaymentServiceCheckServiceOrderService总结

 

  

概述

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

 

  调用校验服务校验待生成的订单是否合法订单服务生成订单(校验服务和订单服务没有依赖关系)调用数字一(一)和2,支付服务实现支付核心的功能结合步骤数字一(一)至3完成支付服务的聚合调用假如步骤数字一(一)的耗时5秒,步骤注射毒品的耗时3秒,步骤3的耗时注射毒品秒,如果你是架构师,要求:

  1.请实现微服务的同步调用

  2.请实现微服务的异步调用(使用可完成的未来实现)

  比较数字一(一)和注射毒品的性能.

  

同步调用和异步调用

 

  

Future类图

 

  

Future的不足

 

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

  1.将两个异步计算合并为一个(第二个异步计算依赖于第一个的结果),这个用将来的不太好实现.

  2.等待将来的集合中的所有的任务都完成

  仅等待将来的集合中最快结束的任务完成,并返回它的结果

  

代码

 

  

代码地址

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

 

  

Test

公共类测试{ public static void main(String[]args){//同步调用长启动1=系统。当前时间毫秒();支付服务。同步支付();System.out.println(同步支付耗时:’(系统。当前时间毫秒()-start 1)毫秒);系统。出去。println(===================);//异步调用长启动2=系统。当前时间毫秒();支付服务。异步支付();System.out.println(异步支付耗时:’(系统。当前时间毫秒()-start 2)毫秒);}}

 

  

PaymentService

导入Java。util。并发。completablefuture导入Java。util。并发。时间单位;公共类支付服务{ /** *异步支付的入口方法* * @ return */public static boolean async pay(){//校验CompletableFutureBoolean有效=completablefuture。提供异步(()-检查服务。是valid());//创建订单CompletableFutureInteger orderSum=completablefuture。提供异步(()-订单服务。创建订单());//支付CompletableFutureInteger money=completablefuture。supply async(()-base pay());//上面三个都完成之后,再进行下面匿名内部类的代码completablefuture。全部(有效,订单,钱).然后运行(()- System.out.println(完成异步支付)) .join();返回true} /** *同步支付的入口方法* * @ return */public static boolean sync pay(){ check service。是有效的();订单服务。创建订单();基本工资();System.out.println(同步支付成功);//假设支付成功返回true } public static int base pay(){ int money=1000;试试{时间单位.秒。睡眠(2);} catch(中断异常e){ e . printstacktrace();} System.out.println(支付);//假设支付成功还钱;}}

 

  

CheckService

导入Java。util。并发。时间单位;公共类检查服务{/** *返回真实的说明订单流程才会往下走*/public static boolean有效(){ system。出去。println(订单生成前,检验订单是否合法 );试试{时间单位.秒.睡眠(5);} catch(中断异常e){ e . printstacktrace();} //假设订单合法,通过校验返回true}}

 

  

OrderService

导入Java。util。并发。时间单位;public class OrderService { public static int create order(){ int orderSum=1;System.out.println(生成订单 );试试{时间单位.秒。睡眠;} catch(中断异常e){ e . printstacktrace();} //假设订单数量为数字一(one)返回orderSum}}

 

  

总结

本文到此为止。希望它能帮到你,也希望你能多关注更多的盛行它的内容!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: