Using joinfork framework in Java : Join Fork « JDK 7 « Java






Using joinfork framework in Java



import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;

public class Test {
  public static void main(String[] args) {
    int numbers[] = new int[100000];
    ForkJoinPool forkJoinPool = new ForkJoinPool();
    long result = forkJoinPool.invoke(new SumOfSquaresTask(0, numbers.length));
    System.out.println("forkJoinPool: " + forkJoinPool.toString());
    System.out.println("forkJoinPool: " + forkJoinPool.toString());
    System.out.println("Sum of squares: " + result);
  }
}
class SumOfSquaresTask extends RecursiveTask<Long> {
  private int numbers[] = new int[100000];
  private int threshold = 1000;
  private int from;
  private int to;

  public SumOfSquaresTask(int from, int to) {
    this.from = from;
    this.to = to;
  }

  @Override
  protected Long compute() {
    long sum = 0L;
    int mid = (to + from) >>> 1;

    if ((to - from) < threshold) {
      for (int i = from; i < to; i++) {
        sum += numbers[i] * numbers[i];
      }
      return sum;
    } else {
      List<RecursiveTask<Long>> forks = new ArrayList<>();
      SumOfSquaresTask task1 = new SumOfSquaresTask(from, mid);
      SumOfSquaresTask task2 = new SumOfSquaresTask(mid, to);
      forks.add(task1);
      task1.fork();
      forks.add(task2);
      task2.fork();

      for (RecursiveTask<Long> task : forks) {
        sum += task.join();
      }
      return sum;
    }
  }
}

 








Related examples in the same category