SubmissionPublisher クラス

定義

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

[Android.Runtime.Register("java/util/concurrent/SubmissionPublisher", ApiSince=33, DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public class SubmissionPublisher : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IAutoCloseable, Java.Util.Concurrent.Flow.IPublisher
[<Android.Runtime.Register("java/util/concurrent/SubmissionPublisher", ApiSince=33, DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type SubmissionPublisher = class
    inherit Object
    interface IAutoCloseable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface Flow.IPublisher
継承
SubmissionPublisher
属性
実装

注釈

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。 現在の各サブスクライバーは、ドロップまたは例外が発生しない限り、同じ順序で新しく送信されたアイテムを受け取ります。 SubmissionPublisher を使用すると、項目ジェネレーターは、ドロップ処理やフロー制御のブロックに依存する 準拠のリアクティブ ストリーム パブリッシャーとして機能できます。

SubmissionPublisher は、サブスクライバーへの配信にコンストラクターで指定された を使用 Executor します。 Executor の最適な選択は、予想される使用によって異なります。 送信されたアイテムのジェネレーターが別々のスレッドで実行され、サブスクライバーの数を見積もることができる場合は、 の使用を Executors#newFixedThreadPool検討してください。 それ以外の場合は、既定値 (通常は ) を ForkJoinPool#commonPool使用することを検討してください。

バッファリングにより、プロデューサーとコンシューマーは異なるレートで一時的に動作できます。 各サブスクライバーは、独立したバッファーを使用します。 バッファーは最初の使用時に作成され、必要に応じて指定された最大値まで拡張されます。 (強制容量は、2 の最も近い累乗に切り上げたり、この実装でサポートされている最大値に制限されたりする可能性があります)。の Flow.Subscription#request(long) request 呼び出しによってバッファーが拡張されるわけではありませんが、未入力の要求が最大容量を超えると、飽和状態が発生する可能性があります。 の既定値 Flow#defaultBufferSize() は、予想される料金、リソース、使用状況に基づいて容量を選択するための出発点として役立つ場合があります。

1 つの SubmissionPublisher を複数のソース間で共有できます。 アイテムを発行する前またはシグナルを発行 <する前のソース スレッド内のアクション。>各サブスクライバーによる対応するアクセスの後に発生<する前/i> アクション。 しかし、報告されたラグと需要の見積もりは、同期制御ではなく監視で使用するように設計されており、古いビューや不正確な進行状況のビューを反映している可能性があります。

パブリケーション メソッドでは、バッファーが飽和した場合の処理に関するさまざまなポリシーがサポートされています。 メソッドは #submit(Object) submit 、リソースが使用可能になるまでブロックします。 これは最も単純ですが、応答性は最も低い方法です。 メソッドは offer 、項目を (直ちにまたは境界付きタイムアウトで) 削除できますが、ハンドラーをインターポーズしてから再試行する機会を提供します。

サブスクライバー メソッドが例外をスローした場合、そのサブスクリプションは取り消されます。 ハンドラーがコンストラクター引数として指定されている場合は、メソッド 内の例外に対して取り消し前に呼び出されますが、メソッド Flow.Subscriber#onNext onNextFlow.Subscriber#onSubscribe onSubscribeFlow.Subscriber#onError(Throwable) onError 内の例外は、取り消しFlow.Subscriber#onComplete() onComplete前に記録または処理されません。 タスクを実行しようとしたときに指定された Executor が (またはその他の RuntimeException または Error) をスロー RejectedExecutionException した場合、またはドロップ されたアイテムを処理するときにドロップ ハンドラーが例外をスローした場合、例外は再スローされます。 このような場合、すべてのサブスクライバーが発行されたわけではありません。 通常、このような場合は を使用することをお #closeExceptionally closeExceptionally 勧めします。

メソッド #consume(Consumer) は、サブスクライバーの唯一のアクションが、指定された関数を使用してすべての項目を要求および処理する一般的なケースのサポートを簡略化します。

このクラスは、項目を生成するサブクラスの便利なベースとして機能し、このクラスの メソッドを使用してそれらを発行することもできます。 たとえば、サプライヤーから生成された項目を定期的に公開するクラスを次に示します。 (実際には、生成を個別に開始および停止したり、Executor をパブリッシャー間で共有したり、SubmissionPublisher をスーパークラスではなくコンポーネントとして使用したりするメソッドを追加できます)。

{@code
            class PeriodicPublisher<T> extends SubmissionPublisher<T> {
              final ScheduledFuture<?> periodicTask;
              final ScheduledExecutorService scheduler;
              PeriodicPublisher(Executor executor, int maxBufferCapacity,
                                Supplier<? extends T> supplier,
                                long period, TimeUnit unit) {
                super(executor, maxBufferCapacity);
                scheduler = new ScheduledThreadPoolExecutor(1);
                periodicTask = scheduler.scheduleAtFixedRate(
                  () -> submit(supplier.get()), 0, period, unit);
              }
              public void close() {
                periodicTask.cancel(false);
                scheduler.shutdown();
                super.close();
              }
            }}

実装の例を次に Flow.Processor 示します。 図をわかりやすくするために、発行元に対するシングルステップ要求を使用します。 よりアダプティブ バージョンでは、 から submit返されるラグ推定値と他のユーティリティ メソッドを使用してフローを監視できます。

{@code
            class TransformProcessor<S,T> extends SubmissionPublisher<T>
              implements Flow.Processor<S,T> {
              final Function<? super S, ? extends T> function;
              Flow.Subscription subscription;
              TransformProcessor(Executor executor, int maxBufferCapacity,
                                 Function<? super S, ? extends T> function) {
                super(executor, maxBufferCapacity);
                this.function = function;
              }
              public void onSubscribe(Flow.Subscription subscription) {
                (this.subscription = subscription).request(1);
              }
              public void onNext(S item) {
                subscription.request(1);
                submit(function.apply(item));
              }
              public void onError(Throwable ex) { closeExceptionally(ex); }
              public void onComplete() { close(); }
            }}

9 に追加されました。

の Java ドキュメント java.util.concurrent.SubmissionPublisher

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

SubmissionPublisher()

サブスクライバーへの非同期配信用に を ForkJoinPool#commonPool() 使用して新しい SubmissionPublisher を作成します (ただし、並列処理レベルが少なくとも 2 つサポートされていない場合は、各タスクを実行するために新しいスレッドが作成されます)。最大バッファー容量 Flow#defaultBufferSizeは 、 メソッド Flow.Subscriber#onNext(Object) onNextではサブスクライバー例外のハンドラーはありません。

SubmissionPublisher(IExecutor, Int32)

サブスクライバーへの非同期配信用に指定された Executor を使用して新しい SubmissionPublisher を作成し、各サブスクライバーに対して指定された最大バッファー サイズを指定し、メソッド Flow.Subscriber#onNext(Object) onNextでサブスクライバー例外のハンドラーを作成しません。

SubmissionPublisher(IExecutor, Int32, IBiConsumer)

サブスクライバーへの非同期配信用に指定された Executor を使用して新しい SubmissionPublisher を作成し、各サブスクライバーに対して指定された最大バッファー サイズを指定し、null 以外の場合は、サブスクライバーが メソッド Flow.Subscriber#onNext(Object) onNextで例外をスローしたときに呼び出される特定のハンドラーを作成します。

SubmissionPublisher(IntPtr, JniHandleOwnership)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

プロパティ

Class

この Objectのランタイム クラスを返します。

(継承元 Object)
ClosedException

に関連付けられている #closeExceptionally(Throwable) closeExceptionally例外を返します。閉じていない場合は null、正常に閉じている場合は null を返します。

Executor

非同期配信に使用される Executor を返します。

Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
HasSubscribers

このパブリッシャーにサブスクライバーがある場合は true を返します。

IsClosed

この発行元が送信を受け入れていない場合は true を返します。

JniIdentityHashCode

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
JniPeerMembers

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

MaxBufferCapacity

サブスクライバーごとの最大バッファー容量を返します。

NumberOfSubscribers

現在のサブスクライバーの数を返します。

PeerReference

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
Subscribers

サブスクライバーでメソッドを呼び出すのではなく、監視と追跡の目的で現在のサブスクライバーの一覧を Flow.Subscriber 返します。

ThresholdClass

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

ThresholdType

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

メソッド

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
Close()

既に閉じていなければ、問題 Flow.Subscriber#onComplete() onComplete は現在のサブスクライバーに通知され、それ以降の発行の試行は禁止されます。

CloseExceptionally(Throwable)

既に閉じていなければ、問題 Flow.Subscriber#onError(Throwable) onError は指定されたエラーで現在のサブスクライバーに通知され、それ以降の発行の試行は許可されません。

Consume(IConsumer)

指定された Consumer 関数を使用して、発行されたすべてのアイテムを処理します。

Dispose()

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
Dispose(Boolean)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
EstimateMaximumLag()

現在のすべてのサブスクライバー間で生成されたが、まだ使用されていないアイテムの最大数の見積もりを返します。

EstimateMinimumDemand()

現在のすべてのサブスクライバー間で要求された (を介して Flow.Subscription#request(long) request) まだ生成されていないアイテムの最小数の見積もりを返します。

GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
IsSubscribed(Flow+ISubscriber)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

JavaFinalize()

ガベージ コレクションがオブジェクトへの参照がなくなったと判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドをウェイクアップします。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドをウェイクアップします。

(継承元 Object)
Offer(Object, IBiPredicate)

メソッドを非同期的に呼び出 Flow.Subscriber#onNext(Object) onNext すことによって、指定された項目を可能な場合は、現在の各サブスクライバーに発行します。

Offer(Object, Int64, TimeUnit, IBiPredicate)

可能であれば、指定された項目を Flow.Subscriber#onNext(Object) onNext 現在のサブスクライバーに発行します。そのメソッドを非同期的に呼び出し、指定されたタイムアウトまで、または呼び出し元スレッドが中断されるまで、指定されたサブスクリプションのリソースが使用できない間にブロックします。その時点で、指定されたハンドラー (null 以外の場合) が呼び出され、true を返す場合は 1 回再試行されます。

SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
Submit(Object)

メソッドを非同期的に呼び出して、指定されたアイテムを Flow.Subscriber#onNext(Object) onNext 現在のサブスクライバーに発行します。サブスクライバーのリソースが使用できない間は中断されずにブロックされます。

Subscribe(Flow+ISubscriber)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

ToArray<T>()

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常<>は、通知</em> または <em>割り込み</em によって待機します>。

(継承元 Object)
Wait(Int64)

現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

IJavaPeerable.Disposed()

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
IJavaPeerable.Finalized()

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

GetJniTypeName(IJavaPeerable)

現在の Flow.Publisher サブスクライバーに送信された (null 以外の) 項目を閉じるまで非同期的に発行する 。

適用対象