jdk7 並行計算框架Fork/Join


故名思義,拆分fork+合並join。jdk1.7整合Fork/Join,性能上有大大提升。

思想:充分利用多核CPU把計算拆分成多個子任務,並行計算,提高CPU利用率大大減少運算時間。有點像,MapReduce思路感覺大致一樣。

jdk7中已經提供了最簡潔的接口,讓你不需要太多時間關心並行時線程的通信,死鎖問題,線程同步,下面是它提供的接口:

簡單示例:

package tank.forjoin.demo;

import java.util.concurrent.RecursiveTask;

/**
        * @author tank
        * @date:2014-8-27 下午01:30:06
        * @description:
        * @version :任務
        * futrue:
        * forkjoinTask:recursiveTask recursiveAction
        */
public class Demo1 extends RecursiveTask<Integer> {
    private int start;
    private int end;

    public Demo1(int start, int end) {
        this.start = start;
        this.end = end;
    }

    //計算
    @Override
    protected Integer compute() {
        int sum = 0;
        if (start - end < 100) {
            for (int i = start; i < end; i++) {
                sum += i;
            }
        } else {//間隔有100則拆分多個任務計算
            int middle = (start + end) / 2;
            Demo1 left = new Demo1(start, middle);
            Demo1 right = new Demo1(middle + 1, end);
            left.fork();
            right.fork();

            sum = left.join() + right.join();
        }
        return sum;
    }
}
package tank.forjoin.demo;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;

import org.junit.Test;

/**
        * @author tank
        * @date:2014-8-27 下午01:50:20
        * @description:
        * @version :
        */
public class TestDemo1 {
    @Test
    public void testDemo1() throws InterruptedException, ExecutionException {
        ForkJoinPool forkJoinPool = new ForkJoinPool();//對線程池的擴展
        Future<Integer> result = forkJoinPool.submit(new Demo1(1, 10000));

        System.out.println(result.get());
     
     forkJoinPool.shutdown(); } }

RecursiveAction 無返回值任務。

RecursiveTask有返回值類型。

ForkJoinPool提供了一系列的submit方法,計算任務。ForkJoinPool默認的線程數通過Runtime.availableProcessors()獲得,因為在計算密集型的任務中,獲得多於處理性核心數的線程並不能獲得更多性能提升。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM