public interface Subscription
通过Subscriber.getSubscription()建立一份新的“订阅”。
这是Future风格的订阅数据获取接口,支持同步和异步两种方式。创建一次Subscription后,可以多次调用 waitNext()
或 waitNext(long) 方法获取数据更新。
每份订阅只能在最多一个线程中使用,如果需要在多线程的场景中使用订阅,请创建多份订阅。
注意:每次创建的Subscription都拥有彼此独立的通知状态,所以不要在等待循环中反复创建Subscription。
正确的做法是在循环外创建一个Subscription,并在循环内多次调用其 waitNext() 或 waitNext(long) 方法。
| 限定符和类型 | 方法和说明 |
|---|---|
boolean |
hasNext()
检查当前是否有尚未领取的订阅数据。
|
List<Object> |
waitNext()
等待直到获得上一次调用
waitNext() 或 waitNext(long) 方法后发布的数据。 |
List<Object> |
waitNext(long timeoutInMillis)
等待一定时间,直到获得上一次调用
waitNext() 或 waitNext(long) 方法后发布的数据。 |
boolean hasNext()
waitNext() 或 waitNext(long) 方法可以立即得到订阅的数据而不会阻塞,
否则调用上述两个方法将阻塞直到获得订阅的数据(或超时)。List<Object> waitNext() throws CancellationException, InterruptedException
CancellationException - 当订阅者取消了对数据的订阅。InterruptedException - 若等待过程中线程被中断。List<Object> waitNext(long timeoutInMillis) throws CancellationException, InterruptedException
waitNext() 或 waitNext(long) 方法后发布的数据。(同步方式)
如果调用时已有尚未领取的数据,则直接返回之;否则将等待最多指定的超时时长,直到获得订阅的数据。
timeoutInMillis - 超时时长(单位:毫秒)CancellationException - 当订阅者取消了对数据的订阅。InterruptedException - 若等待过程中线程被中断。Copyright © 2019. All rights reserved.