public class pub extends SubmissionPublisher {
private static int anInt = 0;
private final ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(1);
public void start() {
scheduledExecutorService.scheduleAtFixedRate(() -> {
submit(anInt);
System.out.println(anInt);
anInt += 1;
}, 0, 500, TimeUnit.MILLISECONDS);
}
public static void main(String[] args) {
pub pub = new pub();
sub sub = new sub();
pub.start();
pub.subscribe(sub);
}
}
public class sub implements Flow.Subscriber {
private Flow.Subscription subscription;
@Override
public void onSubscribe(Flow.Subscription subscription) {
this.subscription=subscription;
System.out.println("订阅完成");
subscription.request(1);
}
@Override
public void onNext(Object item) {
System.out.println("数据已收到"+item);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
subscription.request(1);
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onComplete() {
System.out.println(3);
}
}
总结
submit()提交后多余的数据被缓存,等待Subscriber获取
Publisher持有Subscriber对象引用,接受请求后,推送数据至相关方法