博客
关于我
parallelStream导致LinkedList遍历时空指针的问题
阅读量:795 次
发布时间:2023-02-26

本文共 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或其他线程安全的集合来替代。

转载地址:http://ntvfk.baihongyu.com/

你可能感兴趣的文章
OpenStack 网络服务Neutron详解
查看>>
Openstack(两控制节点+四计算节点)-1
查看>>
openstack--memecache
查看>>
openstack-keystone安装权限报错问题
查看>>
openstack下service和endpoint
查看>>
Openstack企业级云计算实战第二、三期培训即将开始
查看>>
OpenStack创建虚拟机实例实战
查看>>
OpenStack安装部署实战
查看>>
OpenStack架构
查看>>
OpenStack版本升级与故障排查实战
查看>>
OpenStack的基本概念与架构详解
查看>>
Openstack的视频学习
查看>>
openstack虚拟机迁移live-migration中libvirt配置
查看>>
ORACEL学习--理解over()函数
查看>>
oracle 10g的安装配置
查看>>
Oracle 11g数据库安装和卸载教程
查看>>
ORACLE Bug 4431215 引发的血案—原因分析篇
查看>>
oracle dblink 创建使用 垮库转移数据
查看>>
oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
查看>>
Oracle dbms_job.submit参数错误导致问题(ora-12011 无法执行1作业)
查看>>