Java 9 で Subscriber インターフェイスを実装するにはどうすればよいですか?

WBOY
リリース: 2023-09-04 13:33:07
転載
790 人が閲覧しました

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

Java 9 は、いくつかのインターフェイスを導入することで リアクティブ ストリーム の作成をサポートします: PublisherSubscriberSubscription、および Publisher インターフェイスを実装する SubmissionPublisher クラス。各インターフェイスは、Reactive Streaming の原則に従って、異なる役割を果たすことができます。

Subscriber インターフェイスを使用して、publisher によって公開されたデータをサブスクライブできます。 Subscriber インターフェイスを実装し、抽象メソッドの実装を提供する必要があります。

Flow.Subscriber インターフェイスのメソッド:

  • onComplete(): このメソッドは、Publisher オブジェクトがその役割を完了するときに呼び出されます。
  • onError(): このメソッドは、パブリッシャーに問題があり、サブスクライバーに通知するときに呼び出されます。
  • 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 で Subscriber インターフェイスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート