我已经写了下面这段代码:
我看到
static private int counter;
public void compute()
{
if (array.length<=500)
{
for(int i = 0;i<array.length;i++){
counter++;
System.out.println("Ciao this is a recursive action number"+ counter+Thread.currentThread().getName());
}
}
else{
int split = array.length/2;
RecursiveActionTry right = new RecursiveActionTry(split);
RecursiveActionTry left = new RecursiveActionTry(split);
invokeAll(right, left);
我看到
invokeAll()
自动分叉了我传递的两个RecursiveActionTry
对象之一。我的笔记本只有2个核心...如果我有4个核心并启动4个任务,invokeAll(right, left, backward, forward);
是否会使用所有4个核心?由于我只有2个核心,无法知道。我还想知道,invokeAll(right, left)在幕后是否为第一个参数(right)调用compute()
,并为第二个参数(left)调用fork + join
(就像递归任务扩展应该是的那样)。否则它不会使用并行处理,对吗?顺便问一下,如果有超过2个参数,它会在第一个参数上调用compute()
并在其他所有参数上进行分叉吗?谢谢。