如何使用Java 9 Flow Interfaces /将它们包含在Java 9中有什么意义?
首先,我必须说,我对反应式编程没有多少经验。如何使用Java 9 Flow Interfaces /将它们包含在Java 9中有什么意义?
由于JDK 9(Flow and its nested interfaces)中只有几个接口,因此JDK 9显然不包含像RxJava这样的反应式库。
在Javadoc中,有一些用于实现Publisher
,Subscription
和Subscriber
的示例。但这些似乎是相当低级的,没有任何反应式操作员或处理背压。
那么将这些接口包含到JDK中有什么意义?
反应性库的供应商是否应该使用它们,以便这些应用程序的Java实现(如RxJava)使用一组通用接口? (类似于JPA和休眠?)
主要允许Java本身在将来的某个版本在内部使用反应式编程,如反应式JDBC,网络,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),反应流将有它的own bridge eventually。还有一个为Java 9功能编写的。
只需添加到这个令人印象深刻的列表中,*存在* Android的流量回溯:[streamsupport-flow](https://sourceforge.net/projects/streamsupport/) – Sartorius
流接口的目的是提供“非阻塞反压异步流处理的标准”。已经有很多解决方案可以实现(比如Rx),但通过引入一个通用接口,它最大限度地提高了互操作性。
背压是关键点,背压是,如果生产者给出回调,消费者可以以比生产者能够处理的速度快的速度调用回调。
通过在同一个线程上运行它们以便消费者和生产者彼此阻塞,很容易实现BLOCKING背压。
该Flow界面可以让我们实现非阻塞反压。
其中的细节更详细地在这个环节上解释(和有关如何使用该接口):https://aboullaite.me/java-9-new-features-reactive-streams/
另外,Java 9是否支持rx-java observable方法? Java 9仅向rx-java提供了基础结构吗? –
你有没有做过之前的研究 - 就像阅读相应的jep? – GhostCat
只要添加到@GhostCat指出的内容,请查看[JEP#266](http://openjdk.java.net/jeps/266)。 – nullpointer