Java 9 中的 Subscription 接口有哪些规则?

javaobject oriented programmingprogramming更新于 2025/10/22 10:52:17

一个 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() 方法必须对 Publisher  和 Subscriber 之间可能的同步递归设置上限。
  • Subscription.request() 方法应通过及时返回来尊重其调用者的响应性。
  • Subscription.cancel() 方法必须尊重通过及时返回来提高其调用者的响应度,并且必须是线程安全的。
  • 当 Subscription 未被取消时, Subscription.request(long n) 方法必须注册给定数量的额外元素,以便向相应的订阅者生成。
  • 当 Subscription 未被取消时,Subscription.request(long n)  方法必须调用 onError() 方法,如果参数 <= 0,则抛出 IllegalArgumentException 。
  • 当 Subscription 未被取消时,Subscription.request(long n) 方法可以同步调用此订阅者或其他订阅者上的 onNext() 方法。
  • 当 Subscription 未被取消时, Subscription.request(long n) 方法可以同步调用此订阅者或其他订阅者上的 onComplete() 或 onError() 方法。
  • 当订阅未被取消时,Subscription.cancel() 方法必须请求发布者停止向其订阅者发出信号。不能要求该操作立即影响订阅。
  • 当订阅未被取消时,Subscription.cancel() 方法必须请求发布者删除对相应订阅者的任何引用。
  • 调用 Subscription.cancel() 和 Subscription.request () 方法必须正常返回。
  • Subscription 必须支持无限数量的请求调用,并支持最多 2^63-1 的需求。如果需求等于或大于 2^63-1,则发布商可将其视为实际上无限制。

相关文章


有用资源