美文网首页
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