RxJavaAPI和Java9流API之间的区别

RxJavaAPI和Java9流API之间的区别,java,rx-java,rx-java2,java-9,Java,Rx Java,Rx Java2,Java 9,在最近几个主要版本中,Java的每次迭代似乎都有新的方法来管理并发任务 在Java9中,我们有类似于RxJava的接口,但在Java9中有一组更简单的类和接口 Java9 拥有Flow.Publisher,Flow.Subscriber,Flow.Processor,Flow.Subscription,仅此而已 RxJava 具有类的所有包,即io.reactivex.flowables,io.reactivex.subscribers,io.reactivex.processors,io.re

在最近几个主要版本中,Java的每次迭代似乎都有新的方法来管理并发任务

在Java9中,我们有类似于RxJava的接口,但在Java9中有一组更简单的类和接口

Java9

拥有
Flow.Publisher
Flow.Subscriber
Flow.Processor
Flow.Subscription
,仅此而已

RxJava

具有类的所有包,即
io.reactivex.flowables
io.reactivex.subscribers
io.reactivex.processors
io.reactivex.observators
,以及
io.reactivex.obervable
这些似乎做了类似的事情


这两个库之间的主要区别是什么?为什么有人会使用Java 9流库而不是更多样化的RxJava库,反之亦然?

“这两个库之间的主要区别是什么?”

正如您自己所指出的,Java9库更基本,基本上是作为反应流的通用API,而不是一个成熟的解决方案

“为什么有人会使用Java 9流库而不是更多样化的RxJava库,反之亦然?”


好吧,出于同样的原因,人们使用基本的库结构而不是库——少了一个需要管理的依赖性。另外,由于Java9中的FlowAPI更通用,因此它不受特定实现的约束

开始时,有Rx,版本一。它是一种与语言无关的反应式API规范,具有针对Java、JavaScript、.NET的实现。然后他们改进了,我们看到了。它也有不同语言的实现。在RX2的时候,Spring团队正在开发他们自己的一套反应式API

然后他们都想:为什么不共同努力,创建一个API来管理所有的API呢。就是这样建立起来的。建立高度优化的反应流合规运营商的联合研究工作。当前的实现者包括RxJava2和Reactor

与此同时,JDK开发人员意识到,反应性的东西非常好,值得在Java中使用。在Java世界中,事实上的标准通常成为法律上的标准。还记得Hibernate和JPA、Joda Time和Java8日期/时间API吗?因此,JDK开发者所做的是提取反应式API的核心,最基本的部分,并使其成为标准。这就是j.u.c.Flow的诞生

从技术上讲,
j.u.c.Flow
要简单得多,它只包含,而其他库提供几十个类和数百个操作符

我希望,这回答了“它们之间有什么区别”的问题

为什么有人会选择j.u.c.Flow而不是Rx?好吧,因为现在它是一个标准

目前JDK只提供一个
j.u.c.Flow
:。它实际上是一个酝酿中的API。但在将来,我们可能会期望Reactor、rxjava2以及其他库(如reactive DB drivers甚至FS IO)对它的支持。

这两个库之间的主要区别是什么? 作为一个信息性的评论(但太长了,不适合),负责在Java9中引入
API的在其描述中指出了这一点(我的重点)——

  • 支持反应流发布-订阅的接口 框架,嵌套在新类

  • Publisher
    s制作项目 由一个或多个
    订阅者
    s使用,每个订阅者由
    订阅
    管理

  • 通信依赖于一种简单的流量控制形式(方法
    订阅。请求
    ,用于传达背压),可以 用于避免在其他情况下可能发生的资源管理问题 基于“推送”的系统。提供了实用程序类
    SubmissionPublisher
    开发人员可以使用它来创建自定义组件

  • 这些(非常 小型)接口与广泛参与定义的接口相对应 (来自反应流计划)并支持互操作性 跨许多在JVM上运行的异步系统。

  • 在类中嵌套接口是一种保守的策略 它们在各种短期和长期可能性中的使用。那里 没有计划提供基于网络或I/O的
    java.util.concurrent
    用于分布式消息传递的组件,但未来的JDK 发行版将在其他软件包中包含此类API

为什么有人会使用Java9流库而不是更多样化的RxJava库,反之亦然

从更广阔的前景来看,这完全是基于客户机正在开发的应用程序类型及其对框架的使用等因素的观点


这两个库之间的主要区别是什么

Java 9 Flow API不是一个独立的库,而是Java标准版库的一个组件,由4个接口组成,这些接口采用了2015年初制定的规范。理论上,它的加入可以支持JDK的特定用途,例如正在酝酿的HttpClient,可能是部分计划的异步数据库连接,当然还有
SubmissionPublisher

RxJava是一个Java库,它使用ReactiveX风格的API设计在反应(push)数据流上提供一组丰富的操作符。版本2通过
Flowable
和各种
XxxProcessor
s实现了反应流API,该API允许其他兼容库使用
Flowable
的实例,进而可以将任何
发布者
包装成
Flowable
来使用它们