Java Fork-Join框架实现并发查找
2017-05-05 14:10
369 查看
import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveTask; public class ForkJoinTest { public static void main(String[] args) { // TODO Auto-generated method stub final int SIZE = 10; Double[] nums = new Double[SIZE]; for (int i = 0; i < SIZE; ++i) { nums[i] = Math.random(); System.out.print(nums[i] + " "); } System.out.println(); ForkJoinPool pool = new ForkJoinPool(); ForkJoinCounter counter = new ForkJoinCounter(nums, 0, nums.length, new Filter() { @Override public boolean accept(double t) { // TODO Auto-generated method stub if(t > 0.5) return true; return false; } }); pool.invoke(counter); System.out.println("N: " + counter.join()); } } interface Filter { public boolean accept(double t); } class ForkJoinCounter extends RecursiveTask<Integer> { private static final long serialVersionUID = 1587552485829092262L; public static final int THREAD_HOLD = 3; private Double[] nums; private int from; private int to; private Filter filter; public ForkJoinCounter(Double[] nums, int from, int to, Filter filter) { super(); this.nums = nums; this.from = from; this.to = to; this.filter = filter; } @Override protected Integer compute() { // TODO Auto-generated method stub int count = 0; if (to - from < THREAD_HOLD) { for (int i = from; i < to; ++i) { if (filter.accept(nums[i])) ++count; } } else { int mid = (from + to) / 2; ForkJoinCounter leftCounter = new ForkJoinCounter(nums, from, mid, filter); ForkJoinCounter rightCounter = new ForkJoinCounter(nums, mid, to, filter); invokeAll(leftCounter, rightCounter); count = leftCounter.join() + rightCounter.join(); } return count; } }
相关文章推荐
- [转]Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
- [转]Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
- Java并发编程核心方法与框架-Fork-Join分治编程(二)
- java多线程解说【拾贰】_并发框架:Fork/Join
- Java Thread&Concurrency(1): 深入理解Fork-Join并发执行框架
- 学习笔记之Java7中的ForkJoin并发框架初探(下)—— ForkJoin的应用
- java并发(二十五)java7之fork-join框架
- 浅谈Java的Fork/Join并发框架
- Java高并发程序设计笔记(五)之Fork/Join框架
- [转]Java7中的ForkJoin并发框架初探(下)—— ForkJoin的应用
- Java并发编程核心方法与框架-Fork-Join分治编程(二)
- Java并发编程核心方法与框架-Fork-Join分治编程(一)
- java并发之Fork/Join框架
- [转]Java7中的ForkJoin并发框架初探(下)—— ForkJoin的应用
- java高并发设计(八)--并行框架fork/join
- [转]Java7中的ForkJoin并发框架初探(上)——需求背景和设计原理
- java ForkJoin框架实现统计词频性能比较
- Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
- Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
- Java并发框架Fork/Join