Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class RecursiveTask<V> extends ForkJoinTask<V>
ForkJoinTask
. Для классического примера вот задача, вычисляя Числа Фибоначчи:
class Fibonacci extends RecursiveTask<Integer> {
final int n;
Fibonacci(int n) { this.n = n; }
Integer compute() {
if (n <= 1)
return n;
Fibonacci f1 = new Fibonacci(n - 1);
f1.fork();
Fibonacci f2 = new Fibonacci(n - 2);
return f2.compute() + f1.join();
}
}
Однако, помимо того, чтобы быть немым способом вычислить функции Fibonacci (есть простой быстрый линейный алгоритм, который Вы использовали бы практически), это, вероятно, выполнит плохо, потому что самые маленькие подзадачи являются слишком маленькими, чтобы быть стоящим разделением. Вместо этого как имеет место для почти всех приложений ветвления/соединения, Вы выбрали бы некоторый минимальный размер гранулярности (например 10 здесь), для которого Вы всегда последовательно решаете вместо подразделения.Конструктор и Описание |
---|
RecursiveTask() |
Модификатор и Тип | Метод и Описание |
---|---|
protected abstract V |
compute()
Основное вычисление выполняется этой задачей.
|
protected boolean |
exec()
Соглашения выполнения реализаций для RecursiveTask.
|
V |
getRawResult()
Возвращает результат, который был бы возвращен
ForkJoinTask.join() , даже если эта задача завершалась неправильно, или null если эта задача, как известно, не была завершена. |
protected void |
setRawResult(V value)
Вынуждает данное значение быть возвращенным в результате.
|
adapt, adapt, adapt, cancel, complete, completeExceptionally, fork, get, get, getException, getPool, getQueuedTaskCount, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCancelled, isCompletedAbnormally, isCompletedNormally, isDone, join, peekNextLocalTask, pollNextLocalTask, pollTask, quietlyInvoke, quietlyJoin, reinitialize, tryUnfork
protected abstract V compute()
public final V getRawResult()
ForkJoinTask
ForkJoinTask.join()
, даже если эта задача завершалась неправильно, или null
если эта задача, как известно, не была завершена. Этот метод разрабатывается, чтобы помочь отладке, так же как поддерживать расширения. Его использованию в любом другом контексте обескураживают.getRawResult
в классе ForkJoinTask<V>
null
если не завершенныйprotected final void setRawResult(V value)
ForkJoinTask
setRawResult
в классе ForkJoinTask<V>
value
- значениеprotected final boolean exec()
exec
в классе ForkJoinTask<V>
true
если завершено обычно
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.