ForkJoinTask クラス

定義

内で ForkJoinPool実行されるタスクの抽象基本クラス。

[Android.Runtime.Register("java/util/concurrent/ForkJoinTask", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "V" })]
public abstract class ForkJoinTask : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Util.Concurrent.IFuture
[<Android.Runtime.Register("java/util/concurrent/ForkJoinTask", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "V" })>]
type ForkJoinTask = class
    inherit Object
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface IFuture
継承
ForkJoinTask
派生
属性
実装

注釈

内で ForkJoinPool実行されるタスクの抽象基本クラス。 は ForkJoinTask スレッドに似たエンティティであり、通常のスレッドよりもはるかに軽量です。 膨大な数のタスクとサブタスクは、いくつかの使用制限の価格で、ForkJoinPool 内の少数の実際のスレッドによってホストされる可能性があります。

"メイン" ForkJoinTask は、明示的に にForkJoinPool送信されたときに実行を開始します。ForkJoin 計算にまだ関与していない場合は、 、、または 関連するメソッドを介して#fork#invoke開始されますForkJoinPool#commonPool()。 開始すると、通常は他のサブタスクが開始されます。 このクラスの名前で示されているように、 を使用する ForkJoinTask 多くのプログラムでは、 メソッド #fork#join、または などの #invokeAll(ForkJoinTask...) invokeAll派生物のみが使用されています。 ただし、このクラスには、高度な使用法で使用できる他の多くのメソッドと、新しい形式のフォーク/結合処理をサポートできる拡張メカニズムも用意されています。

ForkJoinTask の軽量な形式です Future。 の効率は、純粋関数をForkJoinTask計算したり、純粋に分離されたオブジェクトを操作したりする計算タスクとして使用メインを反映する一連の制限 (部分的に静的に強制可能な制限) に由来します。 主な調整メカニズムは、 #fork非同期実行を配置する と です。このメカニズムは、 #joinタスクの結果が計算されるまで続行されません。 計算では、メソッドやブロックを回避 synchronized するのが理想的であり、他のタスクへの参加や、フォーク/結合スケジューリングと連携するようにアドバタイズされる Phasers などのシンクロナイザーの使用を除き、他のブロック同期を最小限に抑える必要があります。 また、サブ分割可能なタスクはブロック I/O を実行せず、他の実行中のタスクからアクセスされる変数とは完全に独立した変数にアクセスするのが理想的です。 これらのガイドラインは、スローされるなどの IOExceptions チェックされた例外を許可しないことによって、緩やかに適用されます。 ただし、計算で未チェックの例外が引き続き発生する可能性があります。これは、それらを結合しようとしている呼び出し元に再スローされます。 これらの例外には、内部タスク キューの割り当て失敗など、内部リソースの枯渇に起因する例外も含まれます RejectedExecutionException 。 再スロー例外は通常の例外と同じように動作しますが、可能な場合は、計算を開始したスレッドと実際に例外が発生したスレッドの両方のスタック トレース (例: を使用して ex.printStackTrace()表示) が含まれます。最小限は後者のみです。

ブロックする可能性がある ForkJoinTasks を定義して使用することもできますが、これを行うには、さらに 3 つの考慮事項が必要です。(1) 他<の em/em> タスクが外部同期または I/O をブロックするタスクに依存する必要がある場合<>は、いくつかの完了が必要です。 参加しないイベント スタイルの非同期タスク (サブクラス化 CountedCompleterなど) は、多くの場合、このカテゴリに分類されます。 (2) リソースへの影響を最小限に抑えるには、タスクを小さくする必要があります。理想的には、(場合によっては) ブロックアクションのみを実行します。 (3) API が使用されている場合、またはブロックされている可能性のあるタスクの数がプールのForkJoinPool#getParallelismレベルより少ないことがわかっている場合を除きForkJoinPool.ManagedBlocker、プールは、進行状況または良好なパフォーマンスを確保するために十分なスレッドが使用可能であることを保証できません。

タスクの完了を待機して結果を抽出するための主な方法は です #join。ただし、いくつかのバリエーションがあります。メソッドは Future#get 、中断可能な待機や時間指定された待機をサポートし、規則を使用して結果を Future 報告します。 メソッド #invoke は意味的には と fork(); join() 同等ですが、常に現在のスレッドで実行を開始しようとします。 これらのメソッドの "<em>quiet</em>" 形式では、結果を抽出したり、例外を報告したりすることはありません。 これらは、一連のタスクが実行されていて、すべてが完了するまで結果または例外の処理を遅らせる必要がある場合に便利です。 メソッド invokeAll (複数のバージョンで使用可能) は、最も一般的な形式の並列呼び出しを実行します。一連のタスクをフォークし、それらをすべて結合します。

最も一般的な使用法では、フォーク結合ペアは、並列再帰関数からの呼び出し (フォーク) と戻り (結合) のように動作します。 他の形式の再帰呼び出しの場合と同様に、戻り値 (結合) は最も内側から順に実行する必要があります。 たとえば、 a.fork(); b.fork(); b.join(); a.join(); は、 の前bに結合aするよりも実質的に効率的である可能性があります。

タスクの実行状態は、いくつかの詳細 #isDone レベルで照会される可能性があります。 は、タスクが何らかの方法で完了した場合 (タスクが実行されずに取り消された場合を含む) #isCompletedNormally の場合は true です。キャンセルなしでタスクが完了した場合、または例外 #isCancelled が発生した場合は true です。タスクが取り消された場合は true (この場合 #getException は が CancellationException返されます) #isCompletedAbnormally 、タスクが取り消されたか例外が発生した場合は true です。 この場合 #getException 、発生した例外または CancellationExceptionが返されます。

通常、ForkJoinTask クラスは直接サブクラス化されません。 代わりに、フォーク/結合処理の特定のスタイルをサポートする抽象クラスの 1 つをサブクラス化します。通常 RecursiveAction は、結果を返さないほとんどの計算、実行する計算、 RecursiveTask 完了 CountedCompleter したアクションが他のアクションをトリガーする計算の場合です。 通常、具象 ForkJoinTask サブクラスは、コンストラクターで確立されたパラメーターを含むフィールドを宣言し、この基底クラスによって提供される制御メソッドを何らかの方法で使用するメソッドを定義 compute します。

メソッド #join とそのバリアントは、完了依存関係が非循環である場合にのみ使用に適しています。つまり、並列計算は有向非循環グラフ (DAG) として記述できます。 そうしないと、タスクが互いに繰り返し待機するため、実行でデッドロックの形式が発生する可能性があります。 ただし、このフレームワークでは、DAG として静的に構造化されていない問題に対してカスタム サブクラスを構築する際に使用できる他のメソッドと#complete手法 (、、 の使用などPhaser#helpQuiesce) がサポートされています。 このような使用をサポートするために、ForkJoinTask は を使用して値を持つshortタグ付け/<em> をアトミックに <em>し、 を使用#setForkJoinTaskTag#compareAndSetForkJoinTaskTagして#getForkJoinTaskTagチェックできます。 ForkJoinTask 実装では、これらの protected メソッドまたはタグは任意の目的で使用されませんが、特殊なサブクラスの構築で使用される可能性があります。 たとえば、並列グラフ トラバーサルでは、指定されたメソッドを使用して、既に処理されているノード/タスクを再検討しないようにすることができます。 (タグ付けのメソッド名は、その使用パターンを反映するメソッドの定義を促進するために、一部が大きいので、

基になる軽量タスク スケジューリング フレームワークに本質的に関連付けられている実装のオーバーライドを防ぐために、ほとんどの基本サポート メソッドは finalです。 フォーク/結合処理の新しい基本的なスタイルを作成する開発者は、メソッド #exec、、#setRawResultおよび #getRawResultを最小限に抑protectedえながら、サブクラスに実装できる抽象計算メソッドも導入する必要があります。このクラスによって提供される他protectedのメソッドに依存している可能性があります。

ForkJoinTasks では、比較的少量の計算を実行する必要があります。 大きなタスクは、通常は再帰分解によって、より小さなサブタスクに分割する必要があります。 非常に大まかな経験則として、タスクは 100 を超え、1,0000 未満の基本的な計算ステップを実行する必要があり、不定ループを回避する必要があります。 タスクが大きすぎる場合、並列処理でスループットを向上させることはできません。 小さすぎると、メモリと内部タスクのメンテナンスのオーバーヘッドによって処理が過負荷になる可能性があります。

このクラスは、 および のRunnableメソッドを提供adaptしますCallable。これは、 の実行ForkJoinTasksを他の種類のタスクと混合するときに使用できます。 すべてのタスクがこの形式の場合は、em asyncMode</em で構築されたプールの<使用を検討してください>。>

ForkJoinTasks は Serializableであり、リモート実行フレームワークなどの拡張機能で使用できます。 タスクのシリアル化は、実行中ではなく、前または後にのみ行うのが賢明です。 シリアル化は、実行中に依存しません。

1.7 で追加されました。

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

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

コンストラクター

ForkJoinTask()

呼び出すサブクラスのコンストラクター。

ForkJoinTask(IntPtr, JniHandleOwnership)

JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

プロパティ

Class

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

(継承元 Object)
Exception

基本計算によってスローされた例外を返します CancellationException 。取り消された場合は を返し、 null メソッドがまだ完了していない場合は を返します。

ForkJoinTaskTag

このタスクのタグを返します。

Handle

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

(継承元 Object)
IsCancelled

このタスクが true 正常に完了する前に取り消された場合は を返します。

IsCompletedAbnormally

このタスクが例外を true スローした場合、または取り消された場合は を返します。

IsCompletedNormally

このタスクが例外を true スローせずに完了し、取り消されなかった場合は を返します。

IsDone

このタスクが完了した場合は を true 返します。

JniIdentityHashCode

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
JniPeerMembers

内で ForkJoinPool実行されるタスクの抽象基本クラス。

PeerReference

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
Pool

現在のスレッドをホストしているプールを返します。または null 、現在のスレッドが ForkJoinPool の外部で実行されている場合は を返します。

QueuedTaskCount

現在のワーカー スレッドによってフォークされたが、まだ実行されていないタスクの数の推定値を返します。

RawRawResult

によって返される Join()結果を返します。このタスクが異常に完了した場合や null 、このタスクが完了していない場合でも返されます。

SurplusQueuedTaskCount

現在のワーカー スレッドによって保持されているローカルキュータスクの数を、他のワーカー スレッドよりも多く盗む可能性がある数の推定値を返します。このスレッドが ForkJoinPool で動作していない場合は 0 を返します。

ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。

ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。

メソッド

Adapt(ICallable)

指定した のCallableメソッドをアクションとして実行callし、 で結果#joinを返す新しい ForkJoinTask を返し、発生したチェックされた例外を にRuntimeException変換します。

Adapt(IRunnable)

指定Runnableした のメソッドをrunアクションとして実行する新しい ForkJoinTask を返し、 の場合#joinは null 結果を返します。

Adapt(IRunnable, Object)

指定した のメソッドをrunアクションとして実行する新しい ForkJoinTaskRunnable返し、 で#join指定した結果を返します。

Cancel(Boolean)

このタスクの実行を取り消そうとします。

Clone()

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

(継承元 Object)
CompareAndSetForkJoinTaskTag(Int16, Int16)

このタスクのタグ値をアトミックに条件付きで設定します。

Complete(Object)

このタスクを完了し、まだ中止または取り消されていない場合は、後続の および 関連する操作の呼び出しの結果として、指定された値を join 返します。

CompleteExceptionally(Throwable)

このタスクを異常に完了し、まだ中止または取り消されていない場合は、指定された例外と関連する操作を join スローします。

Dispose()

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
Dispose(Boolean)

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
Equals(Object)

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

(継承元 Object)
Exec()

このタスクの基本アクションを直ちに実行し、このメソッドから戻った時点でこのタスクが完了することが保証されている場合は true を返します。

Fork()

現在のタスクが実行されているプールでこのタスクを非同期に実行するように配置します(該当する場合は )。 そうでない#inForkJoinPool場合は をForkJoinPool#commonPool()使用します。

Get()

計算が完了するまで必要に応じて 待機し、その結果を取得します。

Get(Int64, TimeUnit)

計算が完了するまで、必要に応じて最大で指定された時間待機し、その結果 (使用可能な場合) を取得します。

GetHashCode()

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

(継承元 Object)
HelpQuiesce()

現在のタスク ForkJoinPool#isQuiescent をホストしているプールが休止するまで、タスクを実行する場合があります。

InForkJoinPool()

現在の true スレッドが ForkJoinWorkerThread ForkJoinPool 計算として実行されている場合は を返します。

Invoke()

このタスクの実行を開始し、必要に応じて完了を待機し、その結果を返すか、 (オフ) RuntimeException をスローするか Error 、基になる計算が実行した場合は をスローします。

InvokeAll(ForkJoinTask, ForkJoinTask)

特定のタスクをフォークし、各タスクの保留または isDone (オフの) 例外が発生したときにを返します。その場合、例外が再スローされます。

InvokeAll(ForkJoinTask[])

指定したコレクション内のすべてのタスクをフォークし、各タスクの保留または isDone (チェックされていない) 例外が発生したときにを返します。その場合は例外が再スローされます。

InvokeAll(ICollection)

指定したコレクション内のすべてのタスクをフォークし、各タスクの保留または isDone (チェックされていない) 例外が発生したときにを返します。その場合は例外が再スローされます。

JavaFinalize()

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

(継承元 Object)
Join()

計算が完了したときに計算の結果 #isDone 返します。

Notify()

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

(継承元 Object)
NotifyAll()

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

(継承元 Object)
PeekNextLocalTask()

現在のスレッドによってキューに入れられたが、まだ実行されていないタスクをすぐに使用できる場合は、スケジュールを解除または実行しませんが、返します。

PollNextLocalTask()

現在のスレッドが ForkJoinPool で動作している場合は、現在のスレッドによってキューに入れられ、まだ実行されていない次のタスクを実行せずにスケジュールを解除して返します。

PollTask()

現在のスレッドが ForkJoinPool で動作している場合は、スケジュールを解除し、実行せずに、現在のスレッドによってキューに入れられましたが、まだ実行されていない次のタスク (使用可能な場合)、または使用できない場合は、他のスレッドによってフォークされたタスク (使用可能な場合) を返します。

QuietlyComplete()

値を設定せずにこのタスクを正常に完了します。

QuietlyInvoke()

このタスクの実行を開始し、結果を返したり例外をスローしたりすることなく、必要に応じて完了を待機します。

QuietlyJoin()

結果を返したり、例外をスローしたりせずに、このタスクを結合します。

Reinitialize()

このタスクの内部簿記状態をリセットし、後続 forkの を許可します。

SetForkJoinTaskTag(Int16)

このタスクのタグ値をアトミックに設定し、古い値を返します。

SetHandle(IntPtr, JniHandleOwnership)

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

(継承元 Object)
SetRawResult(Object)

指定した値を強制的に結果として返します。

ToArray<T>()

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
ToString()

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

(継承元 Object)
TryUnfork()

このタスクの実行スケジュール解除を試みます。

UnregisterFromRuntime()

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
Wait()

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

(継承元 Object)
Wait(Int64)

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

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

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

(継承元 Object)

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

IJavaPeerable.Disposed()

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
IJavaPeerable.Finalized()

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

内で ForkJoinPool実行されるタスクの抽象基本クラス。

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

内で ForkJoinPool実行されるタスクの抽象基本クラス。

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

内で ForkJoinPool実行されるタスクの抽象基本クラス。

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

内で ForkJoinPool実行されるタスクの抽象基本クラス。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

内で ForkJoinPool実行されるタスクの抽象基本クラス。

GetJniTypeName(IJavaPeerable)

内で ForkJoinPool実行されるタスクの抽象基本クラス。

GetAsync(IFuture)

内で ForkJoinPool実行されるタスクの抽象基本クラス。

GetAsync(IFuture, Int64, TimeUnit)

内で ForkJoinPool実行されるタスクの抽象基本クラス。

適用対象