/** * @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"); } }