>  기사  >  Java  >  Java7에 나타나는 Fork/Join 소개 및 사용법

Java7에 나타나는 Fork/Join 소개 및 사용법

零下一度
零下一度원래의
2017-06-25 10:42:261970검색

Fork/Join

 JAVA7에 등장한 Fork/Join은 분산 파일 시스템 하둡의 mapreduce 아이디어와 유사합니다. 즉, 작업을 분할한 후 조건이 충족될 때까지 분할하는 것입니다

 이해하기 쉽도록: 프로그래밍 논리는 재귀를 차용할 수 있습니다. 아이디어는 최종 호출이 발생할 때까지 레이어별로 반복한 다음 Fork/Join에서 레이어별로 반환하는 것입니다. 이는 각 재귀 메서드를 별도의 스레드에 배치하는 것과 유사합니다. 최신 멀티 코어 프로세서는

 

/**
 * 继承RecursiveTask 则每个子任务带返回值
 * 继承RecursiveAction 则每个子任务不带返回值 */public class FockJoin1 extends RecursiveTask<Integer>{public static void main(String[] args) throws ExecutionException, InterruptedException {long l = System.currentTimeMillis();
        ForkJoinPool pool = new ForkJoinPool();                         //类似线程池,也实现了AbstractExecutorServiceFockJoin1 task = new FockJoin1(1,1000000000);         //新建任务Future<Integer> result = pool.submit(task);                     //将任务提交System.out.println("result is" + result.get());                 //获取结果System.err.println(System.currentTimeMillis() - l);
    }private final Integer index = 5000; //分割任务的基数private final Integer left;private final Integer right;public FockJoin1(Integer left, Integer right) {this.left = left;this.right = right;
    }
    
    @Overrideprotected Integer compute() {int sum = 0;if(right - left < index) {                      //如果任务 小于基数,则直接执行;类似递归的出口for (int i = left; i <= right; i++) {
                sum += i;
            }
        }else {                                         //任务 大于基数,则分割,类似与二分法,也可以更多int middle = (right + left) >> 1;
            FockJoin1 myf1 = new FockJoin1(left, middle);           //二分法左边FockJoin1 myf2= new FockJoin1(middle+1, right);    //二分法右边myf1.fork();                                            //继续执行,类似递归myf2.fork();                                            //继续执行,类似递归Integer integer1 = myf1.join();                         //等待Integer integer2 = myf2.join();
            sum = integer1 + integer2;                              //结果合并        }return sum;
    }
}

과 같은 작업
 에 대해 병렬 처리를 수행합니다.

위 내용은 Java7에 나타나는 Fork/Join 소개 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.