java8并行流parallelStream的坑

半夜上线,发现一个查询返回一会是3,一会是4,很诡异,经过一顿排查,发现是parallelStream 和ArrayList的问题
直接上测试代码
@Test
public void testParallelStream() {
    for (int i = 0; i < 100; i++) {
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        list1.add("a");
        list1.add("b");
        list1.add("c");
        list1.add("d");
        list1.parallelStream().forEach(list->list2.add(list));
        System.out.println(list2.size());

    }
}

循环100次,会出现3,分析原因:ArrayList是线程不安全的,在并行流时,会出现并发问题。所以项目中不要动不动就用ArrayList,在高并发的情况下可能会有问题

猜你喜欢

转载自blog.csdn.net/weixin_42618792/article/details/88769245