Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package forkjoinexample;
- import java.util.concurrent.ForkJoinPool;
- import java.util.concurrent.RecursiveTask;
- public class Example {
- public static void main(String[] args) {
- ForkJoinPool forkJoinPool =
- new ForkJoinPool(Runtime.getRuntime().availableProcessors() - 1);
- int[] elements = new int[]{1,1,1,1,1,3,4,5,5,6,7,234,346,334,524,6455,245
- ,345,234,234,234,234};
- SearchTask task = new SearchTask(elements, 0, elements.length - 1, 234);
- int result = forkJoinPool.invoke(task);
- System.out.println(result);
- }
- }
- class SearchTask extends RecursiveTask<Integer> {
- private final int[] elements;
- private final int start;
- private final int end;
- private final int searchElement;
- public SearchTask(int[] elements, int start, int end, int searchElement) {
- this.elements = elements;
- this.start = start;
- this.end = end;
- this.searchElement = searchElement;
- }
- @Override
- protected Integer compute() {
- if (end - start + 1 > 3) {
- System.out.println("forking" + Thread.currentThread().getName());
- int mid = (start + (end - start) / 2);
- SearchTask task1 = new SearchTask(elements, start, mid, searchElement);
- SearchTask task2 = new SearchTask(elements, mid + 1, end, searchElement);
- task1.fork();
- task2.fork();
- System.out.println("joining" + Thread.currentThread().getName());
- return task1.join() + task2.join();
- }
- return processSearch();
- }
- private Integer processSearch() {
- int count = 0;
- for (int i = start; i <= end; i++) {
- if (elements[i] == searchElement) {
- count++;
- }
- }
- return count;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement