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,则发布商可将其视为实际上无限制。
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

