Java 的 JVM Flow 就是按照 reactive-stream 的 API 规范写的,来看看Flow长的什么样?

可以看到是在神奇 java.util.concurrent 包中,而且这是一个 Final 修饰的类。

java.util.concurrent.Flow包含以下4个接口:
* Flow.Processor(处理器)
* Flow.Publisher(发布者)
* Flow.Subscriber(订阅者)
* Flow.Subscription(订阅管理器)
这些接口都支持响应式流发布-订阅框架。Java 9也提供了实用类SubmissionPublisher。一个发布者产生一个或多个物品,这些物品由一个或多个消费者消耗。并且订阅者由订阅管理器管理。订阅管理器连接发布者和订阅者。
让我们来实现一下这个 Flow 玩玩:

日志输出:

这里使用起来是不是有点 RxJava 的味道。
Flow类允许相互关联的接口和静态方法来建立流控制组件,其中发布者产生由一个或多个订阅者消费的项目,每个订阅者由订阅管理。
Reactive Streams构建在java.util.concurrent.Flow容器对象下,开发者可以在这里找到Flow.Publisher,一个用作lambda表达式或方法引用的赋值目标功能接口。该接口可以让开发者更容易生成Flow.Subscription元素,并且将它们链接在一起。
另一个元素Flow.Subscriber,是异步工作机制,由请求触发。它可以从Flow.Subscription请求多个元素,开发者还可以根据需要自定义缓冲区大小。
这些接口适用于并发和分布式异步设置,它们之间的通信依赖于一种简单的流控制形式,可用于避免资源管理问题。
在一篇文章中,看到 Flow 有下面这个问题,智商有限

参考文档:
https://dzone.com/articles/java-9-flow-api-vs-lmax-disruptor https://github.com/reactive-streams/reactive-streams-jvm/ http://www.importnew.com/23155.html
来源:oschina
链接:https://my.oschina.net/u/2277632/blog/1829703