java8筆記2

 //並行流計算1-100的和
        Integer sum = IntStream.rangeClosed(1, 100).boxed().parallel().collect(Collectors.summingInt(n -> n));
        System.out.println(sum);
        //第二種寫法
        Integer twoSum = Stream.iterate(1, n -> n + 1).limit(100).parallel().reduce(0, Integer::sum);
        System.out.println(twoSum);
        /**
         * 對比:
         * IntStream.rangeClosed直接產生原始類型的int數字,沒有裝箱拆箱的開銷。
         * IntStream.rangeClosed會生成數字範圍,很容易拆分爲獨立的小塊。例如,範圍1~20
         * 可分爲1~5、6~10、11~15和16~20。
         * iterate生成的是裝箱的對象,必須拆箱成數字才能求和;很難把iterate分成多個獨立塊來並行執行。
         * 總結:並行流只能用原始類型流,不能使用Stream.iterate,不然不僅快不了,還給順序處理增加了開銷
         */

        /**
         * 並行流內部使用了默認的ForkJoinPool(分支/合併框架),它默認的
         * 線程數量就是你的處理器數量,這個值是由 Runtime.getRuntime().availableProcessors()得到的
         */
        //獲取計算機處理器數量
        int i = Runtime.getRuntime().availableProcessors();
        System.out.println("該計算機處理器: " + i + "核");
5050
5050
改計算機處理器: 4核

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章