RecursiveAction クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
再帰的な結果のない ForkJoinTask。
[Android.Runtime.Register("java/util/concurrent/RecursiveAction", DoNotGenerateAcw=true)]
public abstract class RecursiveAction : Java.Util.Concurrent.ForkJoinTask
[<Android.Runtime.Register("java/util/concurrent/RecursiveAction", DoNotGenerateAcw=true)>]
type RecursiveAction = class
inherit ForkJoinTask
- 継承
- 属性
注釈
再帰的な結果のない ForkJoinTask。 このクラスは、結果のないアクションを VoidForkJoinTaskとしてパラメーター化する規則を確立します。
nullはVoid型の唯一の有効な値であるため、joinなどのメソッドは、完了時に常にnullを返します。
<b>Sample Usages.</b> ここでは、指定された long[] 配列を並べ替える単純で完全な ForkJoin 並べ替えです。
{@code
static class SortTask extends RecursiveAction {
final long[] array; final int lo, hi;
SortTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
SortTask(long[] array) { this(array, 0, array.length); }
protected void compute() {
if (hi - lo < THRESHOLD)
sortSequentially(lo, hi);
else {
int mid = (lo + hi) >>> 1;
invokeAll(new SortTask(array, lo, mid),
new SortTask(array, mid, hi));
merge(lo, mid, hi);
}
}
// implementation details follow:
static final int THRESHOLD = 1000;
void sortSequentially(int lo, int hi) {
Arrays.sort(array, lo, hi);
}
void merge(int lo, int mid, int hi) {
long[] buf = Arrays.copyOfRange(array, lo, mid);
for (int i = 0, j = lo, k = mid; i < buf.length; j++)
array[j] = (k == hi || buf[i] < array[k]) ?
buf[i++] : array[k++];
}
}}
その後、anArrayを作成して ForkJoinPool で呼び出すことで、new SortTask(anArray)を並べ替えることができます。 より具体的な例として、次のタスクは配列の各要素をインクリメントします。
{@code
class IncrementTask extends RecursiveAction {
final long[] array; final int lo, hi;
IncrementTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
protected void compute() {
if (hi - lo < THRESHOLD) {
for (int i = lo; i < hi; ++i)
array[i]++;
}
else {
int mid = (lo + hi) >>> 1;
invokeAll(new IncrementTask(array, lo, mid),
new IncrementTask(array, mid, hi));
}
}
}}
次の例は、パフォーマンス向上につながる可能性のあるいくつかの改良とイディオムを示しています。RecursiveActions は、基本的な除算と征服のアプローチを維持している限り、完全に再帰的である必要はありません。 ここでは、繰り返される分割の右側のみを 2 つ分割し、 next 参照のチェーンで追跡することによって、二重配列の各要素の正方形を合計するクラスを示します。 メソッドの getSurplusQueuedTaskCountに基づいて動的しきい値を使用しますが、さらに細分するのではなく、盗まれたタスクに対してリーフ アクションを直接実行することで、潜在的な余分なパーティション分割のバランスを取ります。
{@code
double sumOfSquares(ForkJoinPool pool, double[] array) {
int n = array.length;
Applyer a = new Applyer(array, 0, n, null);
pool.invoke(a);
return a.result;
}
class Applyer extends RecursiveAction {
final double[] array;
final int lo, hi;
double result;
Applyer next; // keeps track of right-hand-side tasks
Applyer(double[] array, int lo, int hi, Applyer next) {
this.array = array; this.lo = lo; this.hi = hi;
this.next = next;
}
double atLeaf(int l, int h) {
double sum = 0;
for (int i = l; i < h; ++i) // perform leftmost base step
sum += array[i] * array[i];
return sum;
}
protected void compute() {
int l = lo;
int h = hi;
Applyer right = null;
while (h - l > 1 && getSurplusQueuedTaskCount() <= 3) {
int mid = (l + h) >>> 1;
right = new Applyer(array, mid, h, right);
right.fork();
h = mid;
}
double sum = atLeaf(l, h);
while (right != null) {
if (right.tryUnfork()) // directly calculate if not stolen
sum += right.atLeaf(right.lo, right.hi);
else {
right.join();
sum += right.result;
}
right = right.next;
}
result = sum;
}
}}
1.7 で追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
| 名前 | 説明 |
|---|---|
| RecursiveAction() |
呼び出すサブクラスのコンストラクター。 |
| RecursiveAction(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
| 名前 | 説明 |
|---|---|
| Class |
この |
| Exception |
基本計算によってスローされた例外、または取り消された場合は |
| ForkJoinTaskTag |
このタスクのタグを返します。 (継承元 ForkJoinTask) |
| Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
| IsCancelled |
このタスクが正常に完了する前に取り消された場合は、 |
| IsCompletedAbnormally |
このタスクが例外をスローした場合、または取り消された場合に |
| IsCompletedNormally |
このタスクが例外をスローせずに完了し、取り消されなかった場合に |
| IsDone |
このタスクが完了した場合 |
| JniIdentityHashCode |
相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。 (継承元 Object) |
| JniManagedPeerState |
再帰的な結果のない |
| JniPeerMembers |
再帰的な結果のない |
| PeerReference |
このJava ピアの JNI オブジェクト参照を取得します。 (継承元 Object) |
| RawRawResult |
このタスクが異常に完了した場合でも、 Join()によって返される結果を返します。このタスクが完了していない場合は |
| ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
| ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
メソッド
| 名前 | 説明 |
|---|---|
| Cancel(Boolean) |
このタスクの実行を取り消そうとします。 (継承元 ForkJoinTask) |
| Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
| CompareAndSetForkJoinTaskTag(Int16, Int16) |
このタスクのタグ値をアトミックに条件付きで設定します。 (継承元 ForkJoinTask) |
| Complete(Object) |
このタスクを完了し、まだ中止または取り消されていない場合は、後続の |
| CompleteExceptionally(Throwable) |
このタスクを異常終了し、まだ中止または取り消されていない場合は、 |
| Compute() |
このタスクによって実行される主な計算。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
再帰的な結果のない |
| Dispose() |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| Dispose(Boolean) |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| DisposeUnlessReferenced() |
再帰的な結果のない |
| Equals(Object) |
再帰的な結果のない |
| Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
| ExceptionNow() |
再帰的な結果のない |
| Exec() |
RecursiveActions の実行規則を実装します。 |
| Fork() |
現在のタスクが実行されているプールで非同期的にこのタスクを実行するように配置します (該当する場合)。または |
| Get() |
計算が完了するまで必要に応じて待機し、その結果を取得します。 (継承元 ForkJoinTask) |
| Get(Int64, TimeUnit) |
必要に応じて、計算が完了するまで最大で指定された時間待機し、その結果 (使用可能な場合) を取得します。 (継承元 ForkJoinTask) |
| GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
| Invoke() |
このタスクの実行を開始し、必要に応じて完了を待機して結果を返すか、基になる計算が実行された場合は (オフの) |
| JavaFinalize() |
古い.
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
| Join() |
#isDone が完了したときに計算の結果を返します。 (継承元 ForkJoinTask) |
| Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
| NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
| QuietlyComplete() |
値を設定せずにこのタスクを正常に完了します。 (継承元 ForkJoinTask) |
| QuietlyInvoke() |
このタスクの実行を開始し、必要に応じて完了を待機します。結果を返したり、例外をスローしたりしません。 (継承元 ForkJoinTask) |
| QuietlyJoin() |
結果を返したり、例外をスローしたりせずに、このタスクに参加します。 (継承元 ForkJoinTask) |
| QuietlyJoin(Int64, TimeUnit) |
指定されたタイムアウトの前に完了し、現在のスレッドが中断されていない場合は true を返して、このタスクに参加しようとします。 (継承元 ForkJoinTask) |
| QuietlyJoinUninterruptibly(Int64, TimeUnit) |
このタスクへの参加を試みます。指定されたタイムアウトの前に完了した場合は true を返します (例外が発生する可能性があります)。 (継承元 ForkJoinTask) |
| Reinitialize() |
このタスクの内部ブックキーピング状態をリセットし、後続の |
| ResultNow() |
再帰的な結果のない |
| SetForkJoinTaskTag(Int16) |
このタスクのタグ値をアトミックに設定し、古い値を返します。 (継承元 ForkJoinTask) |
| SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
再帰的な結果のない |
| SetRawResult(Object) |
結果として、指定された値が強制的に返されます。 (継承元 ForkJoinTask) |
| State() |
再帰的な結果のない |
| ToArray<T>() |
このJava配列ラッパーからマネージド配列を作成します。 (継承元 Object) |
| ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
| TryUnfork() |
このタスクの実行スケジュールの解除を試みます。 (継承元 ForkJoinTask) |
| UnregisterFromRuntime() |
相互運用ランタイムからこのJava ピアの登録を解除します。 (継承元 Object) |
| Wait() |
現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。 (継承元 Object) |
| Wait(Int64, Int32) |
現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。 (継承元 Object) |
| Wait(Int64) |
現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
| 名前 | 説明 |
|---|---|
| IJavaPeerable.Disposed() |
再帰的な結果のない |
| IJavaPeerable.Finalized() |
再帰的な結果のない |
| IJavaPeerable.JniObjectReferenceControlBlock |
再帰的な結果のない |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
再帰的な結果のない |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
再帰的な結果のない |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
再帰的な結果のない |
| IJavaPeerable.UnregisterFromRuntime() |
再帰的な結果のない |
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetAsync(IFuture, Int64, TimeUnit) |
再帰的な結果のない |
| GetAsync(IFuture) |
再帰的な結果のない |
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
再帰的な結果のない |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|