Java 9中的Flow API对应于Reactive Streams 规范,它是事实上的标准。它包含一组最少的接口,这些接口捕获了异步发布和订阅的核心。
以下是Flow API的关键接口:
1) 流程。发布者:它产生供订阅者使用的项目,并且仅包含方法:subscription(Subscriber),其目的应该很明显。
void subscribe(Flow.Subscriber<? super T> subscriber)
2) 流程。订阅者:它订阅发布者(通常只有一个)来接收项目(通过方法onNext(T)),错误消息(onError(Throwable))或发出不再需要更多项目的信号(onComplete())。在任何这些事情发生之前,发布者都会调用onSubscription(Subscription) 方法。
void onSubscribe(Flow.Subscription subscription) void onNext(T item) void onError(Throwable throwable) void onComplete()
3) 流程。订阅:单个发布者 和单个订阅者之间的连接。订户可以使用它来请求更多项目(request(long))或断开连接(cancel())。
void request(long n) void cancel()
首先,我们需要创建一个Publisher 和一个Subscriber。
用Publisher::subscribe订阅订阅者。
该发行商 创建一个订阅 ,并呼吁用户:: onSubscription有了它,所以用户可以存储订阅。
在某个时候,订户调用Subscription :: 请求 以请求多个项目。
发布者通过调用Subscriber::onNext开始将项目交给订阅者。它发布的内容绝不超过所请求的项目数。
发布者有时可能会遇到麻烦,并分别调用Subscriber::onComplete 或Subscriber::onError。
订户可能会继续不时请求更多项目,或者通过调用Subscription::cancel断开连接。