ホームページ >Java >&#&チュートリアル >Java 9 で Flow API を使用してリアクティブ ストリーミングを実装するにはどうすればよいですか?

Java 9 で Flow API を使用してリアクティブ ストリーミングを実装するにはどうすればよいですか?

王林
王林転載
2023-09-19 23:49:02803ブラウズ

如何在Java 9中使用Flow API实现响应式流?

Flow API は、Java 9 以降のリアクティブ フロー仕様の公式サポートです。これは、Iterator Observer を組み合わせた パターンです。 Flow API は相互運用仕様であり、RxJava のようなエンドユーザー API ではありません。

フロー API は 4 つの基本インターフェイスで構成されます。

  • サブスクライバ : サブスクライバからパブリッシャーへ コールバックへのサブスクライブ。
  • パブリッシャー: パブリッシャーは、登録されたサブスクライバーにデータ項目のストリームをパブリッシュします。
  • サブスクリプション: パブリッシャーとサブスクライバー間のリンク。
  • プロセッサ: プロセッサは、パブリッシャとサブスクライバの間に位置し、あるストリームを別のストリームに変換します。

以下の例では、データ オブジェクトをリクエストし、それを印刷し、別のデータ オブジェクトをリクエストする基本的なサブスクライバを作成します。 Java によって提供されるパブリッシャー実装 (SubmissionPublisher) を使用してセッションを完了できます。

import java.util.concurrent.Flow;
import java.util.List;
import java.util.concurrent.SubmissionPublisher;

class MySubscriber<T>implements <strong>Flow.Subscriber<T></strong> {
   private <strong>Flow.Subscription</strong> subscription;
   <strong>@Override</strong>
   public void <strong>onSubscribe</strong>(Flow.Subscription subscription) {
      this.subscription = subscription;
      this.subscription.request(1);
   }
   <strong>@Override</strong>
   public void <strong>onNext</strong>(T item) {
      System.out.println(item);
      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("Done");
   }
}

<strong>// main class</strong>
public class FlowTest {
   public static void main(String args[]) {
      <strong>List<String></strong> items = <strong>List.of</strong>("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
      <strong>SubmissionPublisher<String></strong> publisher = new SubmissionPublisher<>();
      publisher.<strong>subscribe</strong>(new MySubscriber<>());
      items.forEach(s -> {
         try {
            Thread.sleep(1000);
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
         publisher.<strong>submit</strong>(s);
      });
      publisher.close();
   }
}

出力

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

以上がJava 9 で Flow API を使用してリアクティブ ストリーミングを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。