1. 程式人生 > >java1.8 stream 並行和序列流

java1.8 stream 並行和序列流

@Test
    public void t2(){
        List<Object> list = Collections.synchronizedList(new ArrayList<>());
        for(int i=0;i<10;i++){
            list.add(i);
        }
        long l1 = System.currentTimeMillis();
        List<Integer>b = new ArrayList<>();
        list.stream().forEach(p->{
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        long l2 = System.currentTimeMillis();
        System.out.println(l2-l1);
    }
}

序列結果2091.

 @Test
    public void t2(){
        List<Object> list = Collections.synchronizedList(new ArrayList<>());
        for(int i=0;i<10;i++){
            list.add(i);
        }
        long l1 = System.currentTimeMillis();
        List<Integer>b = new ArrayList<>();
        list.parallelStream().forEach(p->{
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        long l2 = System.currentTimeMillis();
        System.out.println(l2-l1);
    }
}

並行結果是687.

像這種存在有阻塞的情況,非常適合使用並行流遍歷處理,因為是併發操作,所有需要使用執行緒安全的集合.