【发布时间】:2020-12-01 18:05:28
【问题描述】:
使用 Java Flow API。我有一个Processors 链和一个终端Subscriber。
我已经编写了Subscribers 的代码,其中保留了收到的物品的计数,这些物品与SubmissionPublisher 配合使用。
但是,当我将值从Processor(扩展SubmissionPublisher)传递到下面的Subscriber 时,控制台不会打印任何输出。
如果我删除 minValue.get(),文本将打印到控制台。
为什么调用类变量导致onComplete没有按预期执行?
public class MinValue implements Subscriber<Integer> {
private Flow.Subscription subscription;
private AtomicInteger minValue=new AtomicInteger(Integer.MAX_VALUE);
@Override
public void onSubscribe(Flow.Subscription subscription) {
this.subscription = subscription;
subscription.request(1);
}
@Override
public void onNext(Integer item) {
if(minValue.get()>item){
System.out.println("Min Value : "+item);
minValue.set(item);
}
subscription.request(1);
}
@Override
public void onError(Throwable throwable) {
System.out.println("Error + throwable.getMessage() \nMin Value is : "+minValue.get());
}
@Override
public void onComplete() {
System.out.println("Successful Completion - Min Value is : "+minValue.get());
}
}
编辑 - 添加最小可重现示例
public class NewClass {
public static void main(String args[]) {
SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>();
Subscriber<Integer> subscriber = new MinValue();
publisher.subscribe(subscriber);
publisher.submit(10);
publisher.submit(11);
publisher.submit(9);
publisher.submit(12);
publisher.submit(8);
publisher.close();
}
}
【问题讨论】:
标签: java flow subscriber