rx 异步执行耗时_使用rx-java的异步抽象

rx 异步执行耗时

对我而言,使用Rx-java的一大好处是,无论底层调用是同步还是异步,因此代码看起来都完全相同,因此该条目的标题也是如此。

考虑一个非常简单的客户代码用例,它执行三个缓慢运行的调用并将结果合并到一个列表中:

String op1 = service1.operation();
String op2 = service2.operation();
String op3 = service3.operation();
Arrays.asList(op1, op2, op3)

由于呼叫是同步的,因此花费的时间会增加。 为了模拟慢速调用,以下是每个方法调用中的实现类型:

public String operation() {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);logger.info("End: Executing slow task in Service 1");return "operation1"
}

因此,在这些实现中使用rx-java的第一个尝试是简单地让这些长时间运行的操作返回通用类型Observable ,一个糟糕的实现看起来像这样:

public Observable<string> operation() {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);logger.info("End: Executing slow task in Service 1");return Observable.just("operation 1");
}

因此,此调用者实现更改为以下内容:

Observable<String> op1 = service1.operation();
Observable<String> op2 = service2.operation();
Observable<String> op3 = service3.operation();Observable<List<String>> lst = Observable.merge(op1, op2, op3).toList();

查看调用者如何使用merge方法组合结果。

但是,此时每个服务调用的调用仍是同步的,为了使调用中断,可以通过以下方式使用线程池进行服务调用:

public class Service1 {private static final Logger logger = LoggerFactory.getLogger(Service1.class);public Observable<String> operation() {return Observable.<String>create(s -> {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);s.onNext("operation 1");logger.info("End: Executing slow task in Service 1");s.onCompleted();}).subscribeOn(Schedulers.computation());}
}

subscriptionOn使用指定的Scheduler运行实际操作。

该方法的优点在于,该服务的调用代码完全没有更改,那里的实现与以前完全相同,而服务调用现在是异步的。 如果您有兴趣进一步探索这个样本, 这里是一个GitHub库一起工作的例子。

翻译自: https://www.javacodegeeks.com/2015/02/async-abstractions-using-rx-java.html

rx 异步执行耗时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中return的各种用法

按初学的理解&#xff0c;return的任务就是返回对应的参数&#xff0c;在外层函数中对这个参数做进一步处理。实际上return的用法不只这些。为调用的函数返回参数值此类应用最为普遍&#xff0c;通常是在一个具有返回值的函数中&#xff0c;返回一个参数值&#xff0c;这个返回…

代码内查找函数引用_叮~~二级操作题 excel常考函数大梳理

1.AND函数格式&#xff1a;AND(logical1,logical2…)功能&#xff1a;and函数是一个逻辑函数&#xff0c;表示同时满足多个条件。通常配合if函数做条件判断&#xff0c;得值为true或者是false。2.OR函数格式&#xff1a;OR(logical1,logical2…)功能&#xff1a;or函数是一个逻…

hazelcast入门教程_Hazelcast入门指南第6部分

hazelcast入门教程这是有关Hazelcast的一系列文章中的第六篇。 如果一个人没有看过过去的五年&#xff0c;请到表中的内容后 &#xff0c;我创建赶上。 本地客户 在上一篇文章之后&#xff0c;我决定要去本地化。 是的&#xff0c;我将演示Hazelcast自己的Java客户端。 Java不…

总结C语言中的数组知识点

数组&#xff1a;只能存放一种数据类型&#xff0c;比如int类型的数组、float类型的数组&#xff0c;里面存放的数据称为“元素”。数组的定义&#xff1a;首先声明数组的类型&#xff0c;然后声明数组元素的个数&#xff0c;也就是定义需要多少存储空间。数组格式与初始化格式…

python学什么版本2020年_2020年了居然还有人在学Python?学python有什么用?

都2020年了居然还有人在学python&#xff1f;学python有什么用&#xff1f;真是气抖冷啊&#xff01;想学习python的小伙伴&#xff0c;可以加裙595227871 领取免费的学习资料为什么选择python&#xff1f;1.行业人才的需求 在过去五年里&#xff0c;呈现出爆发性增长的趋势。今…

主要矛盾和次要矛盾_次要GC,主要GC与完整GC

主要矛盾和次要矛盾在使用Plumbr中的GC暂停检测功能时&#xff0c;我被迫通过大量有关该主题的文章&#xff0c;书籍和演示工作。 在整个旅程中&#xff0c;我多次对次要&#xff0c;主要和完全GC事件的使用&#xff08;误用&#xff09;感到困惑。 这导致了这篇博客文章&#…

action mutation 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...

module与moduleCollection你一定要会啊&#xff01;Vuex源码学习(五)加工后的module在组件中使用vuex的dispatch和commit的时候&#xff0c;我们只要把action、mutation注册好&#xff0c;通过dispatch、commit调用一下方法名就可以做到。使用方式vue组件内//in vue componentt…

grunt 插件_从Grunt测试Grunt插件

grunt 插件编写针对grunt插件的测试结果比预期的要简单。 我需要运行多个任务配置&#xff0c;并想通过在主目录中键入grunt test来调用它们。 在第一个任务失败后&#xff0c;咕声通常会退出。 这使得不可能在主项目gruntfile中存储多个失败方案。 从那里运行它们将需要--for…

​嵌入式开发为什么选择C语言?

从语言特点来说C语言有出色的可移植性&#xff0c;能在多种不同体系结构的软/硬平台上运行。简洁紧凑&#xff0c;使用灵活的语法机制&#xff0c;并能直接访问硬件能够直接访问硬件的语言有&#xff1a;汇编和C语言汇编属于低级语言&#xff0c;难以完成一些复杂的功能&#x…

mysql 临时表 heap_mysql优化: 内存表和临时表

由于直接使用临时表来创建中间表&#xff0c;其速度不如人意&#xff0c;因而就有了把临时表建成内存表的想法。但内存表和临时表的区别且并不熟悉&#xff0c;需要查找资料了。一开始以为临时表是创建后存在&#xff0c;当连接断开时临时表就会被删除&#xff0c;即临时表是存…

序列化与反序列化的单例模式_序列化代理模式

序列化与反序列化的单例模式在上一篇文章中 &#xff0c;我谈到了一般的序列化。 这是更加集中的内容&#xff0c;并提供了一个细节&#xff1a; 序列化代理模式 。 这是处理序列化中许多问题的一种好方法&#xff0c;通常是最好的方法。 如果开发人员只想了解这一主题&#xf…

图解C语言的希尔排序

希尔排序是插入排序的一种&#xff0c;又称“缩小增量排序”&#xff0c;希尔排序是直接插入排序算法的一种更高效的改进版本。希尔排序的基本思想设等待排序等元素序列有n个元素&#xff0c;首先取一个整数increment&#xff08;小于n&#xff09;作为间隔将全部元素分为n/inc…

给oim_对OIM Web(UI)层进行压力测试

给oimOracle IDM中的默认配置保留20个专用于服务前端&#xff08;UI&#xff09;请求的线程 。 这基本上意味着应用程序服务器具有20个线程池&#xff0c;可用于为通过Web控制台&#xff08;/ identity或/ sysadmin&#xff09;访问OIM的用户提供服务。 对于Weblogic &#xf…

windows mysql is read only_mysql中Table is read only错误解决方法(转载)

下面来给各位同学介绍一下关于mysql中Table is read only的解决技巧&#xff0c;希望例子能帮助到各位。今天再我把数据库data 拷贝到linux 下运行程序 ”mysql中Table is read only的解决“ 出现这样的问题&#xff0c;查询资料。linux下执行如下命令即可#mysqladmin -u root…

C语言打印输出红色字体

除了Linux&#xff0c;在VS下也可以实现变色这一效果&#xff0c;先看下面的一段代码&#xff1a;#include int main(int argc,char **argv){ printf("\033[44;37;5m hello world\033[0m\n");return 0;}编译后运行上述代码&#xff0c;结果如下&#xff1a;可见&…

mysql g月份分组_PowerBI快捷键——视觉对象分组功能

PowerBI的2020年4月份更新虽然发布在5月份&#xff0c;但的确是提供了很多强大的功能。在以往&#xff0c;要选中多个视觉对象&#xff0c;往往需要按住CTRL键挨个单击选中&#xff0c;然后在进行下一步的分组或其他操作。但是在4月份更新中&#xff0c;PowerBI允许我们通过在画…

编译原理抽象语法树_平衡抽象原理

编译原理抽象语法树使代码复杂易读和理解的一件事是&#xff0c;方法内部的指令处于不同的抽象级别。 假设我们的应用程序仅允许登录用户查看其朋友的旅行。 如果用户不是朋友&#xff0c;则不会显示任何行程。 一个例子&#xff1a; public List<Trip> tripsByFriend…

谈谈单片机编程思想——状态机

玩单片机还可以&#xff0c;各个外设也都会驱动&#xff0c;但是如果让你完整的写一套代码时&#xff0c;却无逻辑与框架可言。这说明编程还处于比较低的水平&#xff0c;你需要学会一种好的编程框架或者一种编程思想&#xff01;比如模块化编程、状态机编程、分层思想等。本文…

C语言结构体使用与指针的理解

以前总有一种疑惑。为什么结构体的指针有的需要用分配空间&#xff1f;有的不需要分配空间呢&#xff1f;现在总结一下思路&#xff1a;一&#xff1a;关于结构体的定义问题&#xff1a;使用结构体一般会使用变量或者定义指针typedef struct{ int a; int b; }data;使用这个结构…

elementui 进度条怎么做_小E,Excel中这样的进度条是怎么做出来的?

我的目标&#xff1a;让中国的大学生走出校门的那一刻就已经具备这些office技能&#xff0c;让职场人士能高效使用office为其服务。支持我&#xff0c;也为自己加油&#xff01;前面我们分享过如何做进度条&#xff1a;《Excel进度条启示&#xff1a;专注与持续积累定会让人生出…