多线程操作导致LinkedList报NoSuchElementException

今天查看log日志突然发现有个异常如下:

java.util.NoSuchElementException: null

at java.util.LinkedList.removeFirst

看了下我的代码

java 复制代码
LinkedList<String> orderIdList = new LinkedList<>();
if(!orderIdList.contains(id)){
            if(orderIdList.size()>100)orderIdList.removeFirst();
			orderIdList.add());
			firstFalg=1;
		}

突然想到LinkedList是线程不安全的,看了下removeFirst 得底层代码

java 复制代码
  public E removeFirst() {
        final Node<E> f = first;
        if (f == null)
            throw new NoSuchElementException();
        return unlinkFirst(f);
    }

如果多线程访问,LinkedList内部结构被修改,则可能会抛出NoSuchElementException异常。

所以修改成

java 复制代码
LinkedList<String> orderIdList = new LinkedList<>();
if(!orderIdList.contains(id)){
            if(orderIdList.size()>100)orderIdList.remove(0);
			orderIdList.add());
			firstFalg=1;
		}

问题解决。

资料查询:多线程操作导致list报NoSuchElementException_-CSDN问答

相关推荐
【D'accumulation】33 分钟前
典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
java·设计模式·mvc
试行1 小时前
Android实现自定义下拉列表绑定数据
android·java
茜茜西西CeCe1 小时前
移动技术开发:简单计算器界面
java·gitee·安卓·android-studio·移动技术开发·原生安卓开发
救救孩子把1 小时前
Java基础之IO流
java·开发语言
小菜yh1 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
宇卿.1 小时前
Java键盘输入语句
java·开发语言
浅念同学1 小时前
算法.图论-并查集上
java·算法·图论
立志成为coding大牛的菜鸟.1 小时前
力扣1143-最长公共子序列(Java详细题解)
java·算法·leetcode
鱼跃鹰飞1 小时前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先
爱上语文3 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring