ホームページ  >  記事  >  Java  >  java7で登場するFork/Joinの紹介と使い方

java7で登場するFork/Joinの紹介と使い方

零下一度
零下一度オリジナル
2017-06-25 10:42:261965ブラウズ

Fork/Join

JAVA7に登場するFork/Joinは、タスクを分割して条件が満たされるまで分割するという分散ファイルシステムHadoopのmapreduceの考え方に似ています

理解を容易にするために:プログラミングロジックは次のようになります。再帰の借用 このアイデアは、最後の呼び出しが見つかるまでレイヤーごとに再帰し、その後レイヤーごとに返すことです。これは、各再帰メソッドを別個のスレッドに置くのと似ています。

最新のマルチを最大限に活用します。 -core プロセッサー、タスク

の並列処理を実行します。例:

/**
 * 继承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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。