JAVA 8 forkjoin實際體驗

JAVA8 函數(shù)編程

-都說java8 新的函數(shù)式編程特別是并行流式編程固耘,但是并行流的性能并不一定就好

        long starttime1=System.currentTimeMillis();
        //cur,bank,eat均為list 
        cul.parallelStream()
                .forEach(tar->{
                    if(bank.parallelStream().
                            filter(poi->dwithin(poi.getLocation(),tar.getLocation(),500))
                            .collect(Collectors.toList()).size()>5 &&
                    eat.parallelStream().
                            filter(poi->dwithin(poi.getLocation(),tar.getLocation(),500))
                            .collect(Collectors.toList()).size()>5
                            )
                        res.add(tar);
                        }

        );
        System.out.println("并行計算耗時:"+String.valueOf(System.currentTimeMillis()-starttime1));
        System.out.println(res.size());
        System.out.println(res.get(0).getName());
        res.clear();
        long starttime=System.currentTimeMillis();
        for(Pois tar:cul){
            List ttmmpp1=new ArrayList();
            List ttmmpp2=new ArrayList();
            for(Pois poi:bank){
                if(dwithin(poi.getLocation(),tar.getLocation(),500))
                    ttmmpp1.add(poi);

            }
            for(Pois poi:eat){
                if(dwithin(poi.getLocation(),tar.getLocation(),500))
                    ttmmpp2.add(poi);

            }
            if(ttmmpp1.size()>5&&ttmmpp2.size()>5)
              res.add(tar);
        }
        System.out.println("順序執(zhí)行耗時:"+String.valueOf(System.currentTimeMillis()-starttime));
        System.out.println(res.size());
        System.out.println(res.get(0).getName());



private static boolean dwithin(String A,String B,int radius) {
        try {
            Point a = (Point) reader.read("POINT(" + A.replace(",", " ") + ")");
            Point b = (Point) reader.read("POINT(" + B.replace(",", " ") + ")");
            return a.within(b.buffer(radius));
        }catch(Exception e) {

        }
        return false;
    }

沒有很復(fù)雜的深層循環(huán)题篷,兩層。結(jié)果可能讓人有些失望厅目。
將并行流改成順序流番枚,時間也少了50ms,這真的是讓人有點迷啊损敷。


并行和順序執(zhí)行對比測試

原因分析

首先我們看看并行流用了多少線程
System.out.println("ForkJoinPool.getCommonPoolParallelism() : " + ForkJoinPool.getCommonPoolParallelism());
輸出:一個線程葫笼。
咦,這拗馒。路星。。那設(shè)置高一點看看诱桂。

 System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "" + 8);
 System.out.println("ForkJoinPool.getCommonPoolParallelism() : " + ForkJoinPool.getCommonPoolParallelism());

設(shè)置無效洋丐,參照如下博客修改了一番。
在run-edit configurations中設(shè)置JVM參數(shù)
-Djava.util.concurrent.ForkJoinPool.common.parallelism=64
其實這樣在CPU核心數(shù)量達不到的情況下確實提升水平有限挥等。
ps:https://blog.csdn.net/blueskybluesoul/article/details/82817007
按照這個教程修改后友绝,再次測試

修改后如下

final Long starttime2=System.currentTimeMillis();
        ForkJoinPool myPool = new ForkJoinPool(8);
        myPool.submit(() ->cul.parallelStream()
                .forEach(tar->{
                            //System.out.println(tar.getName());
                            if(bank.stream().
                                    filter(poi->dwithin(poi.getLocation(),tar.getLocation(),300))
                                    .collect(Collectors.toList()).size()>5 &&
                                    eat.stream().
                                            filter(poi->dwithin(poi.getLocation(),tar.getLocation(),300))
                                            .collect(Collectors.toList()).size()>5
                                    )res.add(tar);
                        }

                )
        ).get();
        myPool.awaitTermination(3, TimeUnit.SECONDS);
        myPool.shutdown();

修改結(jié)果

  • 使用forkjoin指定線程數(shù)量,盡管CPU數(shù)量有限肝劲,依然獲得提升迁客。

  • 多次測試郭宝,平均順序流耗時約34秒,并行流耗時約16秒哲泊。大概提升一倍的效率剩蟀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市切威,隨后出現(xiàn)的幾起案子育特,更是在濱河造成了極大的恐慌,老刑警劉巖先朦,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缰冤,死亡現(xiàn)場離奇詭異,居然都是意外死亡喳魏,警方通過查閱死者的電腦和手機棉浸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刺彩,“玉大人迷郑,你說我怎么就攤上這事〈淳螅” “怎么了嗡害?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畦攘。 經(jīng)常有香客問我霸妹,道長,這世上最難降的妖魔是什么知押? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任叹螟,我火速辦了婚禮,結(jié)果婚禮上台盯,老公的妹妹穿的比我還像新娘罢绽。我一直安慰自己,他們只是感情好静盅,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布有缆。 她就那樣靜靜地躺著,像睡著了一般温亲。 火紅的嫁衣襯著肌膚如雪棚壁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天栈虚,我揣著相機與錄音袖外,去河邊找鬼。 笑死魂务,一個胖子當(dāng)著我的面吹牛曼验,可吹牛的內(nèi)容都是我干的泌射。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼鬓照,長吁一口氣:“原來是場噩夢啊……” “哼熔酷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起豺裆,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤拒秘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后臭猜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躺酒,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年蔑歌,在試婚紗的時候發(fā)現(xiàn)自己被綠了羹应。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡次屠,死狀恐怖园匹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劫灶,我是刑警寧澤裸违,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站浑此,受9級特大地震影響累颂,放射性物質(zhì)發(fā)生泄漏滞详。R本人自食惡果不足惜凛俱,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望料饥。 院中可真熱鬧蒲犬,春花似錦、人聲如沸岸啡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巡蘸。三九已至奋隶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悦荒,已是汗流浹背唯欣。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搬味,地道東北人境氢。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓蟀拷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親萍聊。 傳聞我的和親對象是個殘疾皇子问芬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • ??一個任務(wù)通常就是一個程序,每個運行中的程序就是一個進程寿桨。當(dāng)一個程序運行時此衅,內(nèi)部可能包含了多個順序執(zhí)行流,每個順...
    OmaiMoon閱讀 1,680評論 0 12
  • Java 8 數(shù)據(jù)流教程 原文:Java 8 Stream Tutorial 譯者:飛龍 協(xié)議:CC BY-NC-...
    布客飛龍閱讀 948評論 1 46
  • about Stream 什么是流牛隅? Stream是java8中新增加的一個特性,被java猿統(tǒng)稱為流. Stre...
    jsondream閱讀 25,307評論 8 47
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,113評論 1 32
  • 如今社會的飛速發(fā)展媒佣,交通便利匕累,網(wǎng)絡(luò)發(fā)達,此時各地區(qū)的戶口遷移已是一件平常事默伍,而我也因在深圳生活欢嘿,為了方便也決定把戶...
    竹安倩閱讀 896評論 0 0