次の方法で共有


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

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

A ForkJoinTask は軽量の形式です Future。 s の効率は、純粋関数を 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 レベルで照会できます。タスクが何らかの方法で完了した場合 (タスクが実行されずに取り消された場合を含む) は true です #isCompletedNormally 。取り消しまたは例外が発生せずにタスクが完了した場合は true です #isCancelled 。タスクが取り消された場合 (その場合 #getException は返 CancellationExceptionされます) #isCompletedAbnormally 、タスクが取り消されたか例外が発生した場合は true です。 この場合 #getException 、発生した例外または CancellationException.

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

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

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

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

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

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

1.7 で追加されました。

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

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

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

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

SurplusQueuedTaskCount

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

ThresholdClass

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

ThresholdType

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

メソッド

Adapt(ICallable)

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

Adapt(IRunnable)

指定Runnableされたメソッドをアクションとして実行runし、null の結果を返す new ForkJoinTask を返します#join

Adapt(IRunnable, Object)

指定されたメソッドをアクションとして実行runし、指定Runnableされた結果#joinを返す new ForkJoinTask を返します。

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 スレッドが ForkJoinPool 計算として実行されている ForkJoinWorkerThread 場合に返します。

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実行されるタスクの抽象基本クラス。

適用対象