Вызов более 2-х RecursiveActionTasks в compute()
Каков был бы недостаток, чтобы вызвать много RecursiveAction в следующем коде?
класс RecursiveActionThing extends RecursiveAction {
int numbers = 1000;
public RecursiveActionThing(int numbers)
{
this.numbers = numbers;
}
public void compute()
{
if (numbers<500)
{
for (int i =0;i<numbers;i++)
{
System.out.println(i);
}
}
else{
invokeAll(new RecursiveActionThing(numbers/2),new RecursiveActionThing(numbers/2), new RecursiveActionThing(numbers/2), new RecursiveActionThing(numbers/2));
}
}
}
До сих пор я видел только вызов 2 задач, поэтому, вероятно, выполнение вышеупомянутого вызова приведет к огромным накладным расходам при создании всех этих задач, однако почему это допускается размещением varargs в качестве параметра? В определенной ситуации может быть полезно? Какие? Заранее спасибо.
2 ответа
Прекрасный пример этого есть в тестовых классах, поставляемых с jsr166, MatrixMultiply.java. Вы можете найти его здесь.
Это не имеет особого смысла. Если вы хотите, чтобы определенное число было выполнено, вы должны иметь возможность контролировать его самостоятельно через деление с интервалами 2.
Однако, почему это разрешено, помещая varargs в качестве параметра? В определенной ситуации может быть полезно? Какие?
Я не могу придумать каких-либо полезных причин, по которым это будет использовано. Это перенос ExecutorService и только реализация функциональности. Я бы не рекомендовал это.
Посмотрите на этот вопрос. Это не действует так, как вы надеетесь.