Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9에서 구독자 인터페이스를 어떻게 구현할 수 있습니까?


자바 9 반응 스트림 생성 지원 몇 가지 인터페이스 도입:게시자 , 구독자 , 구독SubmissionPublisher 게시자 를 구현하는 클래스 상호 작용. 각 인터페이스는 반응성 원칙에 따라 다른 역할을 할 수 있습니다. 스트림 .

구독자 를 사용할 수 있습니다. 게시자가 게시하는 데이터를 구독하기 위한 인터페이스 . 구독자 를 구현해야 합니다. 인터페이스를 제공하고 추상 메서드에 대한 구현을 제공합니다.

Flow.Subscriber 인터페이스 메소드:

  • onComplete(): 이 메서드는 게시자 개체가 역할을 완료할 때 호출되었습니다.
  • onError(): 이 메소드는 Publisher에서 문제가 발생했을 때 호출되어 구독자에게 알립니다.
  • onNext(): 이 메서드는 게시자가 모든 구독자에게 통지할 새 정보를 가질 때마다 호출됩니다.
  • onSubscribe(): 게시자가 구독자를 추가할 때 이 메서드가 호출되었습니다.

예시

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