>  기사  >  Java  >  Java 9에서 구독자 인터페이스를 어떻게 구현합니까?

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

WBOY
WBOY앞으로
2023-09-04 13:33:07785검색

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

Java 9 Publisher 를 구현하는 Publisher, Subscriber, SubscriptionSubmissionPublisher 인터페이스를 도입하여 반응형 스트림 생성을 지원합니다. 인터페이스 클래스. 각 인터페이스는 Reactive Streaming 원칙에 따라 서로 다른 역할을 수행할 수 있습니다.

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

Flow.Subscriber 인터페이스의 메서드:

  • onComplete(): 이 메서드는 게시자 개체가 해당 역할을 완료할 때 호출됩니다.
  • onError(): Publisher에 문제가 있을 때 호출되어 Subscriber에게 알립니다.
  • 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 <strong>Flow.Subscriber<Integer></strong> {
      private <strong>Flow.Subscription</strong> subscription;
      private boolean isDone;
      
     <strong> @Override</strong>
      public void <strong>onSubscribe</strong>(Flow.Subscription subscription) {
         System.out.println("Subscribed");
         this.subscription = subscription;
         this.subscription.request(1);
      }
      <strong>@Override</strong>
      public void <strong>onNext</strong>(Integer item) {
         System.out.println("Processing " + item);
         this.subscription.request(1);
      }
      <strong>@Override</strong>
      public void <strong>onError</strong>(Throwable throwable) {
         throwable.printStackTrace();
      }
      <strong>@Override</strong>
      public void <strong>onComplete()</strong> {
         System.out.println("Processing done");
         isDone = true;
      }
   }
   public static void main(String args[]) throws InterruptedException {
      <strong>SubmissionPublisher<Integer></strong> publisher = new <strong>SubmissionPublisher<></strong><strong>()</strong>;
      <strong>Subscriber </strong>subscriber = new <strong>Subscriber()</strong>;
      publisher.subscribe(subscriber);
      <strong>IntStream</strong> intData = <strong>IntStream.rangeClosed</strong>(1, 10);
      intData.forEach(<strong>publisher::submit</strong>);
      publisher.<strong>close()</strong>;
      while(!subscriber.isDone) {
         Thread.sleep(10);
      }
      System.out.println("Done");
   }
}

출력

<strong>Subscribed
Processing 1
Processing 2
Processing 3
Processing 4
Processing 5
Processing 6
Processing 7
Processing 8
Processing 9
Processing 10
Processing done
Done</strong>

위 내용은 Java 9에서 구독자 인터페이스를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제