如何使用Java 9流接口/将它们包含在Java 9中的重点是什么?

时间:2017-09-23 17:25:10

标签: java rx-java reactive-programming java-9

首先,我必须说我对反应式编程没有多少经验。

由于JDK 9(Flow and its nested interfaces)中只有少数接口,因此JDK 9显然不包含像RxJava这样的反应库。

在Javadoc中,有一些实例PublisherSubscriptionSubscriber的示例。但这些似乎是相当低级的,没有任何反应操作员或处理背压。

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

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

2 个答案:

答案 0 :(得分:9)

它主要允许Java本身在未来的某个版本内部使用反应式编程,例如Reactive JDBC,Networking,IO等。在概念上,它也可以作为互操作的新集合点,但是,这样的集合点已经存在反应流通过其Java 6要求瞄准更大的受众。

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

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

主要图书馆已经有这样的桥梁(RxJava 2 Jdk 9 InteropReactor-Core Interop),而Reactive-Streams将拥有其own bridge eventually。还有一个prototype reactive library为Java 9功能编写和使用。

答案 1 :(得分:2)

流接口的目的是为非阻塞背压提供"异步流处理的标准"。已经有很多实现这一目标的解决方案(如Rx),但通过引入通用接口,它可以最大化互操作性。

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

通过在相同的线程上运行阻止背压很容易,消费者和生产者互相阻塞。

此Flow界面将允许我们实现非阻塞背压。

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