クラスRecursiveTask<V>
java.lang.Object
java.util.concurrent.ForkJoinTask<V>
java.util.concurrent.RecursiveTask<V>
- 型パラメータ:
V- タスクの結果のタイプ
- すべての実装されたインタフェース:
Serializable, Future<V>
public abstract class RecursiveTask<V> extends ForkJoinTask<V>
結果を生成する再帰的な
ForkJoinTask。
たとえば、係数を計算するためのタスク・ベースのプログラムを次に示します:
import java.util.concurrent.RecursiveTask;
import java.math.BigInteger;
public class Factorial {
static class FactorialTask extends RecursiveTask<BigInteger> {
private final int from, to;
FactorialTask(int from, int to) { this.from = from; this.to = to; }
protected BigInteger compute() {
int range = to - from;
if (range == 0) { // base case
return BigInteger.valueOf(from);
} else if (range == 1) { // too small to parallelize
return BigInteger.valueOf(from).multiply(BigInteger.valueOf(to));
} else { // split in half
int mid = from + range / 2;
FactorialTask leftTask = new FactorialTask(from, mid);
leftTask.fork(); // perform about half the work locally
return new FactorialTask(mid + 1, to).compute()
.multiply(leftTask.join());
}
}
}
static BigInteger factorial(int n) { // uses ForkJoinPool.commonPool()
return (n <= 1) ? BigInteger.ONE : new FactorialTask(1, n).invoke();
}
public static void main(String[] args) {
System.out.println(factorial(Integer.parseInt(args[0])));
}
}- 導入されたバージョン:
- 1.7
- 関連項目:
-
ネストされたクラスのサマリー
インタフェースFutureで宣言されたネストされたクラス/インタフェース
Future.State -
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明protected abstract Vcompute()このタスクによって実行される主な計算です。protected final booleanexec()RecursiveTaskのための実行規則を実装します。final Vこのタスクが異常な状態で実行された場合であっても、ForkJoinTask.join()によって返される結果を返します。このタスクが実行されたかどうかが不明の場合は、nullです。protected final voidsetRawResult(V value) 指定された値を結果として返すことを強制します。クラスで宣言されたメソッド ForkJoinTask
adapt, adapt, adapt, adaptInterruptible, adaptInterruptible, adaptInterruptible, cancel, compareAndSetForkJoinTaskTag, complete, completeExceptionally, exceptionNow, fork, get, get, getException, getForkJoinTaskTag, getPool, getQueuedTaskCount, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCancelled, isCompletedAbnormally, isCompletedNormally, isDone, join, peekNextLocalTask, pollNextLocalTask, pollSubmission, pollTask, quietlyComplete, quietlyInvoke, quietlyJoin, quietlyJoin, quietlyJoinUninterruptibly, reinitialize, resultNow, setForkJoinTaskTag, state, tryUnfork修飾子と型メソッド説明static ForkJoinTask<?> 指定されたRunnableのrunメソッドをアクションとして実行する新しいForkJoinTaskを返し、ForkJoinTask.join()実行時にnullの結果を返します。static <T> ForkJoinTask<T> 指定されたRunnableのrunメソッドをアクションとして実行する新しいForkJoinTaskを返し、ForkJoinTask.join()実行時に指定された結果を返します。static <T> ForkJoinTask<T> 指定されたCallableのcallメソッドをアクションとして実行する新しいForkJoinTaskを返し、その結果をForkJoinTask.join()実行時に返し、発生したチェック例外をRuntimeExceptionに変換します。static ForkJoinTask<?> adaptInterruptible(Runnable runnable) 指定されたRunnableのrunメソッドをアクションとして実行する新しいForkJoinTaskを返し、ForkJoinTask.join()でnullを返し、検出されたチェック例外をRuntimeExceptionに変換します。static <T> ForkJoinTask<T> adaptInterruptible(Runnable runnable, T result) 指定されたRunnableのrunメソッドをアクションとして実行する新しいForkJoinTaskを返し、ForkJoinTask.join()で指定した結果を返し、検出されたチェック例外をRuntimeExceptionに変換します。static <T> ForkJoinTask<T> adaptInterruptible(Callable<? extends T> callable) 指定されたCallableのcallメソッドをアクションとして実行する新しいForkJoinTaskを返し、その結果をForkJoinTask.join()実行時に返し、発生したチェック例外をRuntimeExceptionに変換します。booleancancel(boolean mayInterruptIfRunning) このタスクの実行の取消しを試みます。final booleancompareAndSetForkJoinTaskTag(short expect, short update) このタスクのタグ値を原子的に条件付きで設定します。voidこのタスクを実行し、中断または取り消しされていない場合、joinの後続の呼び出しおよび関連の操作の結果として指定された値を返します。voidこのタスクを強制的に実行し、中断または取り消しされていない場合は、joinおよび関連の操作の実行時に指定された例外がスローされます。待機せずにタスクによってスローされた例外を返します。final ForkJoinTask<V> fork()現在のタスクが実行されているプール内でこのタスクを非同期に実行するように手配します。該当する場合は、ForkJoinTask.inForkJoinPool()を使用し、そうでない場合、ForkJoinPool.commonPool()を使用します。final Vget()必要に応じて計算が完了するまで待機し、その後、計算結果を取得します。final V必要に応じて、最大で指定された時間、計算が完了するまで待機し、その後、計算結果が利用可能な場合は結果を取得します。final Throwable基本計算によってスローされた例外を返します。取り消された場合はCancellationException、ない場合またはメソッドがまだ実行されていない場合はnullを返します。final shortこのタスクのタグを返します。static ForkJoinPoolgetPool()現在のスレッドをホストしているプールを返します。現在のスレッドがForkJoinPoolの外部で実行されている場合は、nullを返します。static int現在のワーカー・スレッドによってフォークされたが、まだ実行されていないタスクの推定数を返します。static int現在のワーカー・スレッドによって保持されているローカルのキューに入っているタスクが、それを横取りする可能性がある他のワーカー・スレッドよりもどれだけ多いかの推定値を返します。このスレッドがForkJoinPoolで動作していない場合はゼロを返します。static void現在のタスク「静止」をホストするプールまで、タスクが実行される可能性があります。static boolean現在のスレッドが、ForkJoinPool計算として実行されるForkJoinWorkerThreadの場合、trueを返します。final Vinvoke()このタスクの実行を開始し、必要な場合は完了まで待機し、その結果を返すか、基本となる計算がそうである場合は、(チェックされない)RuntimeExceptionまたはErrorをスローします。static <T extends ForkJoinTask<?>>
Collection<T> invokeAll(Collection<T> tasks) 指定されたコレクション内のすべてのタスクをフォークし、各タスクに対してisDoneが適用されるか、(チェックされない)例外が発生する場合に復帰します。後者の場合、例外が再スローされます。static voidinvokeAll(ForkJoinTask<?>... tasks) 指定されたタスクをフォークし、各タスクに対してisDoneが適用されるか、(チェックされない)例外が発生する場合に復帰します。後者の場合、例外が再スローされます。static voidinvokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2) 指定されたタスクをフォークし、各タスクに対してisDoneが適用されるか、(チェックされない)例外が発生する場合に復帰します。後者の場合、例外が再スローされます。final booleanこのタスクが正常に完了する前に取り消された場合はtrueを返します。final booleanこのタスクが例外をスローしたか取り消された場合はtrueを返します。final booleanこのタスクが例外をスローせずに完了し、取り消されなかった場合はtrueが返されます。final booleanisDone()このタスクが完了した場合はtrueを返します。final Vjoin()「完了」の場合の計算結果を返します。protected static ForkJoinTask<?> 現在のスレッドによってキューに入れられたがまだ実行されていないタスクがすぐに使用できる場合、そのタスクを返し、スケジュール解除や実行は行いません。protected static ForkJoinTask<?> 現在のスレッドがForkJoinPoolで動作している場合に、現在のスレッドによってキューに入れられたがまだ実行されていない次のタスクを、実行せずにスケジュール解除して復帰します。protected static ForkJoinTask<?> 現在のスレッドがForkJoinPoolで動作している場合、スケジュールを解除し、実行せずに、プールに外部に送信されたタスク(使用可能な場合)を返します。protected static ForkJoinTask<?> pollTask()現在のスレッドがForkJoinPoolで動作しており、現在のスレッドによってキューに入れられたがまだ実行されていない次のタスクが使用可能な場合、そのタスクを実行せずにスケジュール解除して復帰します。そのようなタスクが使用可能でない場合は、他のスレッドによってフォークされたタスクが対象になります(使用可能な場合)。final void値を設定せずにこのタスクを正常に完了します。final voidこのタスクの実行を開始し、必要な場合は完了まで待機しますが、その結果を返したり例外をスローしたりしません。final voidこのタスクを結合し、その結果を返したり例外をスローしたりしません。final booleanquietlyJoin(long timeout, TimeUnit unit) このタスクへの参加を試みます。指定されたタイムアウトが経過し、現在のスレッドが中断されていないときに(例外的に)が完了した場合はtrueを返します。final booleanquietlyJoinUninterruptibly(long timeout, TimeUnit unit) このタスクへの参加を試みます。指定されたタイムアウトが経過する前に(例外的に)を完了した場合はtrueを返します。voidこのタスクの内部登録状態をリセットし、後続のforkを許可します。計算された結果を待たずに返します。final shortsetForkJoinTaskTag(short newValue) このタスクのタグ値を原子的に設定し、古い値を返します。state()計算状態を返します。booleanこのタスクの実行のスケジュール解除を試みます。クラスオブジェクトで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait修飾子と型メソッド説明protected Objectclone()このオブジェクトのコピーを作成して、返します。booleanこのオブジェクトと他のオブジェクトが等しいかどうかを示します。protected voidfinalize()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。最終決定は非推奨であり、将来のリリースで削除される可能性があります。final Class<?> getClass()このObjectの実行時クラスを返します。inthashCode()このオブジェクトに対するハッシュ・コード値を返します。final voidnotify()このオブジェクトのモニターで待機中のスレッドを1つ再開します。final voidこのオブジェクトのモニターで待機中のすべてのスレッドを再開します。toString()オブジェクトの文字列表現を返します。final voidwait()現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。final voidwait(long timeoutMillis) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。final voidwait(long timeoutMillis, int nanos) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
-
コンストラクタの詳細
-
RecursiveTask
public RecursiveTask()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
compute
-
getRawResult
public final V getRawResult()次のクラスからコピーされた説明:ForkJoinTaskこのタスクが異常な状態で実行された場合であっても、ForkJoinTask.join()によって返される結果を返します。このタスクが実行されたかどうかが不明の場合は、nullです。 このメソッドは、デバッグを支援したり、拡張機能をサポートするためのものです。 これをほかのコンテキストで使用することは推奨されていません。- 定義:
getRawResult、クラスForkJoinTask<V>- 戻り値:
- 結果あるいは
null(完了しない場合)
-
setRawResult
protected final void setRawResult(V value) 次のクラスからコピーされた説明:ForkJoinTask指定された値を結果として返すことを強制します。 このメソッドは拡張機能をサポートするためのものであるため、それ以外の一般的な場合では呼び出してはいけません。- 定義:
setRawResult、クラスForkJoinTask<V>- パラメータ:
value- 値
-
exec
protected final boolean exec()RecursiveTaskのための実行規則を実装します。- 定義:
exec、クラスForkJoinTask<V>- 戻り値:
- このタスクが正常に完了したことがわかっている場合は
true
-