fork(1) download
  1. /* package whatever; // don't place package name! */
  2. import java.util.Random;
  3. import java.util.concurrent.ForkJoinPool;
  4. import java.util.concurrent.RecursiveTask;
  5.  
  6. public class MaximumFinder extends RecursiveTask<Integer> {
  7.  
  8. private static final int SEQUENTIAL_THRESHOLD = 5;
  9.  
  10. private final int[] data;
  11. private final int start;
  12. private final int end;
  13.  
  14. public MaximumFinder(int[] data, int start, int end) {
  15. this.data = data;
  16. this.start = start;
  17. this.end = end;
  18. }
  19.  
  20. public MaximumFinder(int[] data) {
  21. this(data, 0, data.length);
  22. }
  23.  
  24. @Override
  25. protected Integer compute() {
  26. final int length = end - start;
  27. if (length < SEQUENTIAL_THRESHOLD) {
  28. return computeDirectly();
  29. }
  30. final int split = length / 2;
  31. final MaximumFinder left = new MaximumFinder(data, start, start + split);
  32. left.fork();
  33. final MaximumFinder right = new MaximumFinder(data, start + split, end);
  34. return Math.max(right.compute(), left.join());
  35. }
  36.  
  37. private Integer computeDirectly() {
  38. System.out.println(Thread.currentThread() + " computing: " + start
  39. + " to " + end);
  40. int max = Integer.MIN_VALUE;
  41. for (int i = start; i < end; i++) {
  42. if (data[i] > max) {
  43. max = data[i];
  44. }
  45. }
  46. return max;
  47. }
  48.  
  49. public static void main(String[] args) {
  50. // create a random data set
  51. final int[] data = new int[1000];
  52. final Random random = new Random();
  53. for (int i = 0; i < data.length; i++) {
  54. data[i] = random.nextInt(100);
  55. }
  56.  
  57. // submit the task to the pool
  58. final ForkJoinPool pool = new ForkJoinPool(4);
  59. final MaximumFinder finder = new MaximumFinder(data);
  60. System.out.println(pool.invoke(finder));
  61. }
  62. }
  63.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:6: error: class MaximumFinder is public, should be declared in a file named MaximumFinder.java
public class MaximumFinder extends RecursiveTask<Integer> { 
       ^
1 error
stdout
Standard output is empty