微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java 9中,我们如何实现Subscriber接口?

在Java 9中,我们如何实现Subscriber接口?

Java 9 通过引入一些接口来支持创建反应式流PublisherSubscriberSubscription和实现Publisher 接口的SubmissionPublisher 类。每个接口可以根据反应式流的原则扮演不同的角色。

我们可以使用Subscriber 接口订阅publisher发布的数据。我们需要实现Subscriber 接口并为抽象方法提供实现。

  • onComplete():当Publisher对象完成其角色时调用方法
  • onError():当Publisher出现问题并通知Subscriber时调用方法
  • onNext():当Publisher有新信息要通知给所有Subscribers时调用方法
  • onSubscribe():当Publisher添加Subscriber时调用方法
  • 示例

    import java.util.concurrent.Flow;
    import java.util.concurrent.SubmissionPublisher;
    import java.util.stream.IntStream;
    
    public class SubscriberImpltest {
       public static class Subscriber implements Flow.Subscriber<Integer> {
          private Flow.Subscription subscription;
          private boolean isDone;
          
          @Override
          public void onSubscribe(Flow.Subscription subscription) {
             System.out.println("Subscribed");
             this.subscription = subscription;
             this.subscription.request(1);
          }
          @Override
          public void onNext(Integer item) {
             System.out.println("Processing " + item);
             this.subscription.request(1);
          }
          @Override
          public void onError(Throwable throwable) {
             throwable.printstacktrace();
          }
          @Override
          public void onComplete() {
             System.out.println("Processing done");
             isDone = true;
          }
       }
       public static void main(String args[]) throws InterruptedException {
          SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>();
          Subscriber subscriber = new Subscriber();
          publisher.subscribe(subscriber);
          IntStream intData = IntStream.rangeClosed(1, 10);
          intData.forEach(publisher::submit);
          publisher.close();
          while(!subscriber.isDone) {
             Thread.sleep(10);
          }
          System.out.println("Done");
       }
    }

    输出

    Subscribed
    Processing 1
    Processing 2
    Processing 3
    Processing 4
    Processing 5
    Processing 6
    Processing 7
    Processing 8
    Processing 9
    Processing 10
    Processing done
    Done

    以上就是在Java 9中,我们如何实现Subscriber接口?的详细内容,更多请关注编程之家其它相关文章

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

    相关推荐