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.Publisher、Flow.Subscriber、Flow.Subscription、Flow.Processorの4つのインターフェースは、リアクティブストリームの仕様(Reactive Streams Specification)に基づいて設計されています。
- Publisher:データを発行する側を表し、
subscribe()メソッドを1つだけ持ちます。Subscriberを受け取り、データフローを開始します。 - Subscriber:データを受け取る側を表し、
onSubscribe()、onNext()、onError()、onComplete()の4つのメソッドを持ちます。購読開始時、要素受信時、エラー発生時、完了時にそれぞれ呼び出されます。 - Subscription:PublisherとSubscriberをつなぐ関係を表し、
request(long n)で要求する要素数を指定できるほか、cancel()で購読をキャンセルできます。これによりバックプレッシャー(Backpressure)制御が実現されます。 - Processor:SubscriberとPublisherの両方を継承するインターフェースであり、両者のすべてのメソッドを実装します。変換やフィルタリングなど、中間処理を行うコンポーネントとして利用されます。
このように、Flow APIの4つのインターフェースを組み合わせることで、非同期環境でも安全かつ効率的にデータストリームを処理できる、堅牢なリアクティブアプリケーションを構築できます。
-
JavaのFocusListenerインターフェースとは?重要性と実装方法を解説
FocusListenerインターフェースとはJava AWT/SwingにおけるFocusListenerは、コンポーネントがキーボードフォーカスを取得・喪失したタイミングで発生するイベントを受け取るためのリスナーインターフェースです。ユーザーがどのコンポーネントを操作しているのかを検知できるため、入力フォームのバリデーションやガイド表示など、対話的なUIを実現するうえで重要な役割を担います。フォーカスイベントは、コンポーネントがキーボードフォーカスを取得または喪失したときに生成されます。フォーカスイベントを表すオブジェクトは、FocusEventクラスから作成されます。FocusEvent
-
JavaにおけるMouseListenerとMouseMotionListenerの違いを徹底解説
Javaでマウスイベントを処理する際、マウスが静止している状態(クリックや押下など)のイベントにはMouseListenerインターフェースを実装し、マウスが動いている状態(移動やドラッグ)のイベントにはMouseMotionListenerインターフェースを実装します。両者の違いを理解しておくと、目的に応じた適切なリスナーを選択できるようになります。 MouseListenerとは MouseEventは、ソースオブジェクト上でマウスボタン(左ボタンまたは右ボタン)を押したとき、離したとき、クリックした(押してから離す一連の動作)ときに発生します。また、マウスポインタがソースオブジェク