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

WBOY
WBOY 转载
2023-09-04 13:33:07 323浏览

在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接口?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:tutorialspoint,如有侵犯,请联系admin@php.cn删除