I have got the following class which runs and compiles (you can try it out). The only thing puzzles me a little is that at the end in the main it works fine with fj.invoke(task) but it does not with fj.execute(task) and fj.submit(task). I don't get any output with the latter ones. From the API it should be working with the other methods too they perform the task.. even if they either return or not a value they should still perform the task. What am I missing here?
import java.util.concurrent.RecursiveAction;
import java.util.concurrent.ForkJoinPool;
public class RecursiveTaskActionThing extends RecursiveAction{
int roba;
static int counter;
public RecursiveTaskActionThing(int roba)
{
this.roba = roba;
}
public void compute()
{
if (roba<100)
{
System.out.println("The thing has been split as expected: "+ ++counter );
}
else{
roba = roba/2;
RecursiveTaskActionThing rc1 = new RecursiveTaskActionThing(roba);
RecursiveTaskActionThing rc2 = new RecursiveTaskActionThing(roba);
this.invokeAll(rc1,rc2);
}
}
public static void main (String []args)
{
ForkJoinPool fj = new ForkJoinPool();
fj.invoke(new RecursiveTaskActionThing(500));
}
}
You can try it out simply by copy and paste the code, by replacing
fj.invoke(new RecursiveTaskActionThing(500));
with
fj.execute(new RecursiveTaskActionThing(500));
or with
fj.submit(new RecursiveTaskActionThing(500));
it won't spit out any output... I am wondering why.
Thanks in advance.