parallelStream导致LinkedList遍历时空指针的问题
发布日期:2025-05-01 22:15:39 浏览次数:15 分类:精选文章

本文共 972 字,大约阅读时间需要 3 分钟。

在最近的开发过程中,遇到了一个需要注意的问题。在进行LinkedList遍历时,偶尔会出现空指针异常。这种问题的出现与使用ParallelStream向LinkedList中添加元素有关。需要注意的是,ParallelStream是并行流,而LinkedList和ArrayList都不是线程安全的,这可能导致并发修改引发的问题。

举个例子,以下代码运行几次后,偶尔会出现空指针异常:

public class TestLinkedList {    public static void main(String[] args) {        List list = new LinkedList();        List list1 = new ArrayList();        for (int j = 0; j < 1000; j++) {            list1.add(j);        }        list1.parallelStream().forEach(t -> list.add(t));        for (Integer integer : list) {            System.out.println(integer);        }        System.out.println(list.size());    }}

运行结果偶尔会抛出空指针异常:

Exception in thread "main" java.lang.NullPointerException    at java.util.LinkedList$ListItr.next(LinkedList.java:893)    at com.zhangmen.info.job.aop.TestLinkedList.main

这种问题的出现是因为ParallelStream的执行是按部就班的,并行操作可能导致意外的重复添加或其他并发问题。虽然LinkedList和ArrayList都不是线程安全的,但通过ParallelStream操作时,需要特别注意避免并发修改。建议在高并发场景下,可以考虑使用Collections.synchronizedList或其他线程安全的集合来替代。

上一篇:Parameter ‘password‘ not found. Available parameters are [md5String, param1, username, param2]
下一篇:parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率...

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2026年06月03日 15时01分25秒