FokJoin

jdk1.7開始增加FokJoin酪捡, 并行執(zhí)行任務,提高執(zhí)行效率侨把,大數據量窗看。

image.png

image.png
package com.test.forkjoin;

import java.util.concurrent.RecursiveTask;

// 繼承自RecursiveTask
public class ForkJoinDemo extends RecursiveTask<Long>{
    private long start; // 1
    private long end;  // 100000
    private long tmp = 10000;

    public ForkJoinDemo(long start, long end) {
        this.start = start;
        this.end = end;
    }
    
    // 實現compute方法
    @Override
    protected Long compute() {
        if (end - start < tmp) { //比1萬小求和,普通計算
            long sum = 0;
            for (long i = start; i < end; i++) {
                sum += i;
            }
            return sum;
        } else { // 使用forkjoin
            long middle = (start + end) /2; // 中間值
            ForkJoinDemo task1 = new ForkJoinDemo(start, middle);
            task1.fork(); // 拆分任務,把任務壓入線程隊列
            ForkJoinDemo task2 = new ForkJoinDemo(middle, end);
            task2.fork(); // 拆分任務丈挟,把任務壓入線程隊列
            return task1.join() + task2.join(); // 合并任務
        }
    }
}

package com.test.forkjoin;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.LongStream;

public class Test {

    public static void main(String[] args) throws InterruptedException, ExecutionException {
//      test1();
//      test2();
        test3();
    }
    
    public static void test1() {
        long start = System.currentTimeMillis();
        long sum = 0;
        for (long i = 1; i <= 10_0000_0000; i++) {
            sum += i;
        }
        long end = System.currentTimeMillis();
//      sum = 500000000500000000執(zhí)行了:283
        System.out.println("sum = "+sum+"執(zhí)行了:"+(end - start));
    }
    
    public static void test2() throws InterruptedException, ExecutionException {
        long start = System.currentTimeMillis();
        ForkJoinPool forkJoinPool = new ForkJoinPool();
        ForkJoinTask<Long> task = new ForkJoinDemo(1 , 10_0000_0000);
        ForkJoinTask<Long> submit = forkJoinPool.submit(task);
        Long sum = submit.get(); // 阻塞等待
        long end = System.currentTimeMillis();
        //sum = 499999999500000000執(zhí)行了:242
        System.out.println("sum = "+sum+"執(zhí)行了:"+(end - start));
    }
    
    public static void test3() {
        long start = System.currentTimeMillis();
        // 使用stream流計算
        long sum = LongStream.rangeClosed(0, 10_0000_0000).parallel().reduce(0, Long::sum);
        long end = System.currentTimeMillis();
        // sum = 500000000500000000執(zhí)行了:180
        System.out.println("sum = "+sum+"執(zhí)行了:"+(end - start));
    }


}

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末刁卜,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子曙咽,更是在濱河造成了極大的恐慌蛔趴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件例朱,死亡現場離奇詭異孝情,居然都是意外死亡,警方通過查閱死者的電腦和手機洒嗤,發(fā)現死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門箫荡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渔隶,你說我怎么就攤上這事羔挡。” “怎么了间唉?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵绞灼,是天一觀的道長。 經常有香客問我终吼,道長镀赌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任际跪,我火速辦了婚禮商佛,結果婚禮上,老公的妹妹穿的比我還像新娘姆打。我一直安慰自己良姆,他們只是感情好,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布幔戏。 她就那樣靜靜地躺著玛追,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闲延。 梳的紋絲不亂的頭發(fā)上痊剖,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音垒玲,去河邊找鬼陆馁。 笑死,一個胖子當著我的面吹牛合愈,可吹牛的內容都是我干的叮贩。 我是一名探鬼主播击狮,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼益老!你這毒婦竟也來了彪蓬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤捺萌,失蹤者是張志新(化名)和其女友劉穎档冬,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體互婿,經...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡捣郊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年辽狈,在試婚紗的時候發(fā)現自己被綠了慈参。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡刮萌,死狀恐怖驮配,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情着茸,我是刑警寧澤壮锻,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站涮阔,受9級特大地震影響猜绣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜敬特,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一掰邢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伟阔,春花似錦辣之、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至合搅,卻和暖如春多搀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灾部。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工康铭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梳猪。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓麻削,卻偏偏與公主長得像蒸痹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呛哟,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內容