Stream的順序流與並行流


/**
 * @auther hhh
 * @date 2019/1/2 22:52
 * @description
 */
public class StreamAPI2 {
    /**
     * 流的特性:支持並行流與順序流
     * 並行流:多個線程同時運行
     * 順序流:使用主線程,單線程
     */
    public static void main(String[] args) {
        Optional<Integer> optionalInteger = Stream.iterate(1, x -> x+1).limit(200).peek(x->{
                    System.out.println(Thread.currentThread().getName());
                }
        ).max(Integer::compareTo);//輸出 main main Optional[200],始終使用的是主線程,說明流默認是順序流,使用的是主線程
        System.out.println(optionalInteger);
        Optional<Integer> optional = Stream.iterate(1, x -> x+1).limit(200).peek(x->{
                    System.out.println(Thread.currentThread().getName());
                }
        ).parallel().max(Integer::compareTo);//加上 .parallel()可以將其修改成並行流,內部以多線程並行執行任務的方式執行
        //輸出:說明有多個線程在並行執行
        //ForkJoinPool.commonPool-worker-2
        //ForkJoinPool.commonPool-worker-3
        //Optional[200]
        System.out.println(optional);


        //將並行流變成順序流 加上.sequential()
        Optional<Integer> optional1 = Stream.iterate(1, x -> x+1).limit(200).peek(x->{
                    System.out.println(Thread.currentThread().getName());
                }
        ).parallel().sequential().max(Integer::compareTo);
        //設置lambda表達式並行的線程數量,使用parallelism
        //設置啟動變量:加上這個參數設置 java.util.concurrent.ForkJoinPool.common.parallelism
        //設置為5個線程數量
        System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","5");
    }
}

 


免責聲明!

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



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