AX 爱鲜报

RxJava

RxJava 是 Reactive Extensions 的 JVM 实现,用可观察序列组合异步与事件驱动程序,扩展观察者模式并内置丰富操作符,屏蔽线程、同步与并发细节。

爱鲜报评分

0.0

0 人评分

48k

星数

否

中文

Java

主语言

是

活跃

352

贡献者

人工分析

EDITORIAL

推荐理由

RxJava 是 JVM 生态中成熟度极高的响应式编程基础库,48k+ Star、Apache-2.0 许可、长期维护,适合作为异步数据流处理的统一抽象。4.x 版本基于 java.util.concurrent.Flow 重写,并引入虚拟线程与 Streamable 类型,值得新项目跟进。

适用场景

  • Android 与 Java 客户端异步事件处理
  • 服务端高并发数据流与背压控制
  • 网络请求、数据库查询的结果组合与转换
  • GUI 事件与短序列的响应式绑定
  • 微服务间的流式数据处理管道

优点

  • 生态成熟、社区庞大、文档与示例丰富
  • 操作符体系完整,声明式组合异步逻辑清晰
  • Flowable 提供背压支持,避免内存被压垮
  • 4.x 基于 JDK Flow 与虚拟线程,运行时无第三方依赖
  • Apache-2.0 许可,商用友好

缺点

  • 学习曲线陡峭,操作符与调度器概念多
  • 调试与堆栈追踪相对困难,出错定位成本高
  • 4.x 要求较新 JDK,Android 兼容性受 API level 与脱糖限制
  • 3.x 支持将逐步减弱,升级需评估
上手难度 进阶

RxJava 是什么

RxJava 是 Reactive Extensions 在 JVM 上的实现,用可观察序列来组合异步与事件驱动的程序。它把观察者模式扩展到数据/事件序列,并提供大量操作符,让你以声明式方式组合序列,同时屏蔽底层线程、同步、线程安全与并发数据结构等细节。

核心类型

RxJava 4 的组件位于 io.reactivex.rxjava4 包下,基础类与接口位于 io.reactivex.rxjava4.core:

  • Flowable:0..N 个元素,支持 Reactive-Streams 与背压
  • Observable:0..N 个元素,不支持背压
  • Single:恰好 1 个元素或一个错误
  • Completable:无元素,只有完成或错误信号
  • Maybe:0 或 1 个元素,或一个错误
  • Streamable:基于虚拟线程阻塞与 CompletionStage 状态机,天然具备背压

快速上手

以 Gradle 引入依赖(版本号请替换为最新):

implementation "io.reactivex.rxjava4:rxjava:4.x.y"

一个最小示例:

import io.reactivex.rxjava4.core.*;

public class HelloWorld {
    public static void main(String[] args) {
        Flowable.just("Hello world").subscribe(System.out::println);
    }
}

关键概念

上游与下游

数据流由源、若干中间操作符和消费者组成。以某个操作符为参照,向左朝源的方向是上游,向右朝订阅者的方向是下游。

source
  .operator1()
  .operator2()
  .operator3()
  .subscribe(consumer);

背压

当数据流经过异步步骤时,各步骤处理速度不同。为避免下游被压垮(表现为缓冲导致内存上涨或丢数据),背压让步骤声明自己还能处理多少元素,从而约束内存占用。Flowable 专门支持背压,Observable 用于无需背压的短序列与 GUI 交互等场景。

装配期与订阅期

  • 装配期:应用各种中间操作符准备数据流,此时数据尚未流动、无副作用。
  • 订阅期:调用 subscribe() 建立处理链,触发订阅副作用(如 doOnSubscribe)。
  • 运行期:数据流真正开始发射元素、错误或完成信号。

4.x 版本要点

  • 原生 Java 实现,运行时不需要第三方库
  • 基于 java.util.concurrent.Flow,保留 JPMS 与 OSGi 支持
  • 支持虚拟线程:virtualCreate()、virtualTransform()、Schedulers.virtual()
  • 新增 Streamable<T>,可理解为 Java 版的 IAsyncEnumerable
  • 使用 Java Cleaner API 检测资源泄漏并做自适应清理
  • 通过 Reactive Streams TCK 兼容性测试

注意:4.x 对 JDK 版本要求较高,Android 兼容性取决于 API level 与可用的脱糖方案;3.x 的支持将在 4.x 正式发布后逐步减弱。

适合谁用

如果你在 Android 或 Java 服务端需要处理异步事件、组合多个数据源、控制并发与背压,RxJava 是经过大规模验证的选择。代价是概念较多、学习曲线偏陡,建议先从 Flowable/Observable 与常用操作符入手。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。