RxJava是什么
RxJava是由
Netflix提供的ReactiveX一份Java实现。首先我们要熟悉RX的概念,RX广义上指响应式编程。
响应式编程要具备以下几个特性:
1.对事件做出响应:把各类操作抽象为事件,做到事件驱动。
2.对负载做出响应:着眼于系统整体的可扩展性,而不是某一种操作。
3.对失败做出响应:层层处理异常信息,不把异常抛给上层。
4.对操作做出响应:建立同步、异步操作响应,实现交互式用户体验。
RxJava核心概念
RxJava提供了丰富的API,使用者可应用于自己的系统中,在无需精通线程安全性、同步策略、数据一致性及NIO等概念的情况下,即可实现异步编程、编写事件驱动代码。
表面上看,RxJava只是对观察者模式的一种扩展实现,通过将一系列数据、事件和操作动态组合在一起,并发高效的实现特定功能。这么认为的话,就太小看RxJava强大之处了。
RxJava的核心概念为
Observable和
Subscriber,从字面我们就可以看出,关注点在于事件和消费者。
下图对比了数据操作上传统方式和RxJava的差异
差异的关键点在于,Observable(可理解为单个或多个事件)是可以组合使用的。
Java提供的Future对象,比较适用于单一层次的异步调用,遇到复杂场景,尤其可能出现嵌套使用的场景,逻辑上就会变得异常复杂。
单个数据元 | 多个数据元 | |
---|---|---|
同步方式 | T getData() | Iterable<T> getData() |
异步方式 | Future<T> getData() | Observable<T> getData() |
差异的关键点在于,Observable(可理解为单个或多个事件)是可以组合使用的。
Java提供的Future对象,比较适用于单一层次的异步调用,遇到复杂场景,尤其可能出现嵌套使用的场景,逻辑上就会变得异常复杂。
使用Future对象去做各种有条件的异步调用,找出最优组合是非常困难的。很多情况下,是不可能找出的,因为每个延时响应的请求,都是处于变化中的一个状态。
强行使用Future做组合异步调用,会导致代码逻辑异常复杂(甚至引入不易察觉的bug),或者过早的阻塞在future.get()方发出,从而把异步调用所带来的优势消耗的荡然无存。
Observable,就是为了构建各种异步流和组合各类异步数据而诞生的。
下一篇将介绍如何在项目中使用RxJava工具包。