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, compareAndSetForkJoinTaskTag, complete, completeExceptionally, fork, get, get, getException, getForkJoinTaskTag, getPool, getQueuedTaskCount, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCancelled, isCompletedAbnormally, isCompletedNormally, isDone, join, peekNextLocalTask, pollNextLocalTask, pollTask, quietlyComplete, quietlyInvoke, quietlyJoin, reinitialize, setForkJoinTaskTag, tryUnfork
protected abstract V compute()
public final V getRawResult()
ForkJoinTask
ForkJoinTask.join()
, даже если эта задача завершалась неправильно, или null
если эта задача, как известно, не была завершена. Этот метод разрабатывается, чтобы помочь отладке, так же как поддерживать расширения. Его использованию в любом другом контексте обескураживают.getRawResult
в class ForkJoinTask<V>
null
если не завершенныйprotected final void setRawResult(V value)
ForkJoinTask
setRawResult
в class ForkJoinTask<V>
value
- значениеprotected final boolean exec()
exec
в class ForkJoinTask<V>
true
если эта задача, как известно, обычно завершалась
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92