如何使用 Java 9 流接口/将它们包含在 Java 9 中有什么意义?

How to use Java 9 Flow Interfaces / what's the point of including them in Java 9?

首先我不得不说我对响应式编程的经验不多。

由于JDK 9 (Flow and its nested interfaces)中只有几个接口,JDK 9显然不包含像RxJava.[=这样的响应式库。 16=]

在 Java 文档中,有一些 PublisherSubscriptionSubscriber 的实施示例。但是这些似乎很低级,没有任何反应性操作符或背压处理。

那么将这些接口包含到 JDK 中有什么意义呢?

反应库的供应商是否应该使用它们,以便 Java 实现(如 RxJava)使用一组通用接口? (类似于 JPA 和 Hibernate?)

流接口的目的是提供"a standard for asynchronous stream processing with non-blocking back pressure"。已经有很多解决方案实现了这一点(比如 Rx),但通过引入一个通用接口,它最大限度地提高了互操作性。

背压是关键点,背压是,如果生产者给出回调,消费者可以以比生产者可以处理的速度更快的速度调用该回调。

通过运行它们在同一个线程上很容易实现BLOCKING背压,使消费者和生产者互相阻塞。

这个 Flow 接口将使我们能够实现 NON BLOCKING 背压。

详细信息在此 link 中有更详细的解释(以及有关如何使用界面的信息):https://aboullaite.me/java-9-new-features-reactive-streams/

主要是让Java自己在未来的某个版本内部使用响应式编程,比如ReactiveJDBC、Networking、IO等,在概念上,也作为一个新的集结点然而,对于互操作性,这样的集会点已经存在,Reactive Streams 通过其 Java 6 要求针对更大的受众。

正如您提到的,拥有这 4 个接口和 SubmissionPublisher 本身的用途有限。如果 Java 有类似于 Kotlin 和 C# 的扩展方法,那么包含这些接口可能会产生更有趣的影响。

不幸的是,这也意味着现有库必须使用桥接器在 Java 9 Flow 和 Reactive-Streams 之间进行转换 and/or 用 Java 9 Flow [=] 重新实现整个库29=] - 删除没有 Java 9 的任何人(即 Android)。

主要图书馆已经有了这样的桥梁(RxJava 2 Jdk 9 Interop, Reactor-Core Interop) and the Reactive-Streams will have its own bridge eventually. There is also a prototype reactive library 为 Java 9 个功能而编写。