首先,我必须说我对反应式编程没有多少经验。
由于JDK 9(Flow and its nested interfaces)中只有少数接口,因此JDK 9显然不包含像RxJava这样的反应库。
在Javadoc中,有一些实例Publisher
,Subscription
和Subscriber
的示例。但这些似乎是相当低级的,没有任何反应操作员或处理背压。
那么将这些接口包含在JDK中有什么意义呢?
反应库的供应商是否应该使用它们,以便那些Java实现(如RxJava)使用一组通用的接口? (类似于JPA和Hibernate?)
答案 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 Interop,Reactor-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/