美文网首页
parallelStream遇到的坑

parallelStream遇到的坑

作者: 萌新_小白 | 来源:发表于2019-02-12 13:28 被阅读0次

    Java

    parallelStream遇到的坑

    线程安全问题

    paralleStream是并行流,并行就意味着是多线程,多线程就会遇到线程安全的问题。

    list.parallelStream()
                .filter(c ->c.getParentId().equals(id))
                .forEach(c -> {
                        if(!c.getHasProduct() && allRelationMap.get(c.getId())!=null) {
                            c.setProductId(allRelationMap.get(c.getId()).getProductId());
                        }
                        resultList.add(c);
                    });
    

    我在对List的forEach中对数据进行操作时,resultList里面的指经常会出现为NULL的情况,最终发现是由于ArrayList是线程不安全的导致的。

    最终的解决方案是:resultList =new CopyOnWriteArrayList<>();CopyOnWriteArrayList是线程安全的,也可以使用resultList = Collections.synchronizedList(Arrays.asList());

    当然其实最好的解决办法其实是在使用paralleStream时不使用foreach、map。

    相关文章

      网友评论

          本文标题:parallelStream遇到的坑

          本文链接:https://www.haomeiwen.com/subject/mmiheqtx.html