Java 9 中 Subscription 接口的规则是什么?


一个**Subscription**可以被一个发布者和一个订阅者共享,用于协调**数据****交换**。这就是**subscribe()**方法不返回创建的Subscription,而是返回**void**的原因。Subscription只通过**onSubscribe()**方法回调传递给订阅者。Subscription接口包含两个方法:**request()**和**cancel()**。

语法

public interface Subscription {
   public void request(long n);
   public void cancel();
}

Subscription 接口规则

  • **Subscription.request()** 和 **Subscription.cancel()** 方法必须在其订阅者上下文中调用。
  • Subscription 必须允许订阅者在 **onNext()** 或 **onSubscribe()** 方法中同步调用 **Subscription.request()** 方法。
  • **Subscription.request()** 方法必须对发布者和订阅者之间可能的同步递归设置上限。
  • **Subscription.request()** 方法应通过及时返回来尊重其调用者的响应能力。
  • **Subscription.cancel()** 方法必须通过及时返回来尊重其调用者的响应能力,并且必须是**线程安全**的。
  • 在Subscription未取消的情况下,**Subscription.request(long n)** 方法必须注册给定数量的额外元素,以生成到相应的订阅者。
  • 在Subscription未取消的情况下,如果参数<= 0,**Subscription.request(long n)** 方法必须使用**IllegalArgumentException**调用**onError()**方法。
  • 在Subscription未取消的情况下,**Subscription.request(long n)** 方法可以同步调用此订阅者或其他订阅者的**onNext()**方法。
  • 在Subscription未取消的情况下,**Subscription.request(long n)** 方法可以同步调用此订阅者或其他订阅者的**onComplete()**或**onError()**方法。
  • 在Subscription未取消的情况下,**Subscription.cancel()** 方法必须请求发布者停止向其订阅者发出信号。该操作不需要立即影响Subscription。
  • 在Subscription未取消的情况下,**Subscription.cancel()** 方法必须请求发布者删除对相应订阅者的任何引用。
  • 调用**Subscription.cancel()** 和 **Subscription.request ()** 方法必须正常返回。
  • **Subscription**必须支持对请求的无限次调用,并支持高达**2^63-1**的需求。如果需求等于或大于2^63-1,则发布者可以将其视为**有效**的**无界**的。

更新于:2020年4月22日

282 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告