rxjava是什么

时间:2025-04-25 16:28:02

该文章只是介绍了一些基本概念

reactiveX 

近几年,反应式编程很火,那么reactivex是什么呢,一句话概括:reactiveX 是一个跨语言的标准、规范。

由来:reactivex是最开始是一个在微软的计算机科学家发明的,是一个编程的框架,当时用的是.net语言,全称是reactive extensions 也叫reactiveX 或者 RX。

实现的语言:scala、kotlin、groovy、js、android、java等

Rxjava

java开发都听过rxjava,rxjava的全称是reactivexjava,是jvm的reactivex的一个实现。是一个library、类似于 httpServlet、springmvc这种的 对 servlet的实现。目前java语言实现rx的有 jdk9的Flow api、rxjava(现在是2.0版)、Spring Framework 5的 reactor。最流行的是rxjava,可以参考LearningRxjava这本书学习。

reactivex 核心思想

核心其实是观察者模式、主要想解决问题:并行、异步。都说rx天生是异步的、并行的。怎么理解呢

官方例子:一个人同时干三件事情。不相关的三件,可以找两个人三个人一起干,rt就是最长的那件事情的时间,这个就是并行做三件事情。那么对于的rx里就是流的概念,单个流内是串行的,多个流之间才是并行的。异步就是多线程的概念,和java里的异步没有区别。

反应式核心是观察者模式,和。Observable的区别在哪里呢?

1、语法,支持lambda,很简洁、灵活。

2、支持背压(backpressure)由消费者来指定消费能力。支持好几种模式的背压策略。

3、支持数据转换。看起来像是流,在数据到达observer(在rx中一般叫 Subscriber)之前可以有很多操作(指定线程、数据转换等)。可以比喻流(生产者)就是流水线,可以将原材料加工成最终消费者需要的东西,那么流水线上可以有很多的操作,例如

("a")
.map(o->())
.map(o->o+100)
.filter(Objects::notNull)
.map(o->""+o)
.subscribe(::print)

虽然没有啥实际作用。但是可以看出来,在subscribe之前可以做很多转换。

4、支持hot、cold模式,简单概括就是 消息传播方式:能不能收到全量消息,hot模式,就像广播,无论你什么时候订阅,消息只播放一遍,订阅的迟了,只能收到部分消息。而cold模式,就是音乐cd,任何时候订阅都能收到全量消息。这个由具体的类来完成这种功能,大部分的流都是cold模式。