Advertisement
ven4coding

Java Fork Join example

Nov 18th, 2023
1,001
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.84 KB | Source Code | 0 0
  1. package forkjoinexample;
  2.  
  3. import java.util.concurrent.ForkJoinPool;
  4. import java.util.concurrent.RecursiveTask;
  5.  
  6. public class Example {
  7.     public static void main(String[] args) {
  8.         ForkJoinPool forkJoinPool =
  9.                 new ForkJoinPool(Runtime.getRuntime().availableProcessors() - 1);
  10.         int[] elements = new int[]{1,1,1,1,1,3,4,5,5,6,7,234,346,334,524,6455,245
  11.                 ,345,234,234,234,234};
  12.         SearchTask task = new SearchTask(elements, 0, elements.length - 1, 234);
  13.         int result = forkJoinPool.invoke(task);
  14.         System.out.println(result);
  15.     }
  16. }
  17.  
  18. class SearchTask extends RecursiveTask<Integer> {
  19.  
  20.     private final int[] elements;
  21.     private final int start;
  22.     private final int end;
  23.     private final int searchElement;
  24.  
  25.     public SearchTask(int[] elements, int start, int end, int searchElement) {
  26.         this.elements = elements;
  27.         this.start = start;
  28.         this.end = end;
  29.         this.searchElement = searchElement;
  30.     }
  31.  
  32.     @Override
  33.     protected Integer compute() {
  34.         if (end - start + 1 > 3) {
  35.             System.out.println("forking" + Thread.currentThread().getName());
  36.             int mid = (start + (end - start) / 2);
  37.             SearchTask task1 = new SearchTask(elements, start, mid, searchElement);
  38.             SearchTask task2 = new SearchTask(elements, mid + 1, end, searchElement);
  39.             task1.fork();
  40.             task2.fork();
  41.             System.out.println("joining" + Thread.currentThread().getName());
  42.             return task1.join() + task2.join();
  43.         }
  44.         return processSearch();
  45.     }
  46.  
  47.     private Integer processSearch() {
  48.         int count = 0;
  49.         for (int i = start; i <= end; i++) {
  50.             if (elements[i] == searchElement) {
  51.                 count++;
  52.             }
  53.         }
  54.         return count;
  55.     }
  56. }
  57.  
Tags: Java forkjoin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement