Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9のリアクティブストリームを支える4つのコアインターフェースとは?

Java 9では、java.util.concurrent.FlowパッケージのもとでReactive Streams(リアクティブストリーム)が導入されました。これは、相互運用可能なパブリッシュ・サブスクライブ(Publish-Subscribe)フレームワークをサポートするものです。

リアクティブストリームは、非同期の境界を越えて(別スレッドやスレッドプールへ要素を渡しながら)データの非同期ストリームを処理します。この仕組みにより、受信側が任意の量のデータをバッファリングすることを強制されず、バッファオーバーフローの発生を防ぐことができます。

Flow APIの4つのコアインターフェース

Flow APIは、相互に関連する以下の4つのコアインターフェースで構成されています。

  • Publisher(パブリッシャー)
  • Subscriber(サブスクライバー)
  • Subscription(サブスクリプション)
  • Processor(プロセッサー)

各インターフェースの構文

@FunctionalInterface
public static interface Publisher<T> {
    public void subscribe(Subscriber<? super T> subscriber);
}

public static interface Subscriber<T> {
    public void onSubscribe(Subscription subscription);
    public void onNext(T item);
    public void onError(Throwable throwable);
    public void onComplete();
}

public static interface Subscription {
    public void request(long n);
    public void cancel();
}

public static interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}

各インターフェースの役割とメソッド

Flow.PublisherFlow.SubscriberFlow.SubscriptionFlow.Processorの4つのインターフェースは、リアクティブストリームの仕様(Reactive Streams Specification)に基づいて設計されています。

  • Publisher:データを発行する側を表し、subscribe()メソッドを1つだけ持ちます。Subscriberを受け取り、データフローを開始します。
  • Subscriber:データを受け取る側を表し、onSubscribe()onNext()onError()onComplete()の4つのメソッドを持ちます。購読開始時、要素受信時、エラー発生時、完了時にそれぞれ呼び出されます。
  • Subscription:PublisherとSubscriberをつなぐ関係を表し、request(long n)で要求する要素数を指定できるほか、cancel()で購読をキャンセルできます。これによりバックプレッシャー(Backpressure)制御が実現されます。
  • ProcessorSubscriberPublisherの両方を継承するインターフェースであり、両者のすべてのメソッドを実装します。変換やフィルタリングなど、中間処理を行うコンポーネントとして利用されます。

このように、Flow APIの4つのインターフェースを組み合わせることで、非同期環境でも安全かつ効率的にデータストリームを処理できる、堅牢なリアクティブアプリケーションを構築できます。

  1. JavaのFocusListenerインターフェースとは?重要性と実装方法を解説

    FocusListenerインターフェースとはJava AWT/SwingにおけるFocusListenerは、コンポーネントがキーボードフォーカスを取得・喪失したタイミングで発生するイベントを受け取るためのリスナーインターフェースです。ユーザーがどのコンポーネントを操作しているのかを検知できるため、入力フォームのバリデーションやガイド表示など、対話的なUIを実現するうえで重要な役割を担います。フォーカスイベントは、コンポーネントがキーボードフォーカスを取得または喪失したときに生成されます。フォーカスイベントを表すオブジェクトは、FocusEventクラスから作成されます。FocusEvent

  2. JavaにおけるMouseListenerとMouseMotionListenerの違いを徹底解説

    Javaでマウスイベントを処理する際、マウスが静止している状態(クリックや押下など)のイベントにはMouseListenerインターフェースを実装し、マウスが動いている状態(移動やドラッグ)のイベントにはMouseMotionListenerインターフェースを実装します。両者の違いを理解しておくと、目的に応じた適切なリスナーを選択できるようになります。 MouseListenerとは MouseEventは、ソースオブジェクト上でマウスボタン(左ボタンまたは右ボタン)を押したとき、離したとき、クリックした(押してから離す一連の動作)ときに発生します。また、マウスポインタがソースオブジェク