美文网首页
java concurrentModificationExce

java concurrentModificationExce

作者: 我是大导演 | 来源:发表于2017-09-22 15:26 被阅读0次

今天早上同事发来一张图,显示一个刚刚系统异常了

异常的发生一个获取缓存的类里, 初步分析是多线程执行缓存里的List时,ArrayList非线程安全导致

复现: 

     三个线程对同一个缓存List进行读,写,删除

复现问题: 

看代码发现: 

      每次操作时,list定义的两个值,一个预期修改值,一个修改值,当执行修改动作时,modCount值会++

    如果预期值与修改值不一样就抛出异常

所以多线程时,有可能一个线程修改了modCount,而另一个线程刚好检查时,则抛出异常

修改方案:

    1. 用线程安全的List.  CopyOnWriteArrayList , 因为我的是在缓存时的,所以不能用此方法,会导致强转报错

    2. 加锁  

  staticReentrantReadWriteLockreadWriteLock=newReentrantReadWriteLock();

 staticLockreadLock=readWriteLock.readLock();

 staticLockwriteLock=readWriteLock.writeLock();

相关文章

  • java concurrentModificationExce

    今天早上同事发来一张图,显示一个刚刚系统异常了 异常的发生一个获取缓存的类里,初步分析是多线程执行缓存里的List...

  • Java ConcurrentModificationExce

    今天在修改程序的一个功能时,出现了ConcurrentModificationException异常,度娘之得到解...

  • Java集合ConcurrentModificationExce

    最近看同事写了一个方法,在list循环里面修改list,以我的经验,肯定是会报ConcurrentModifica...

  • <>集合元素删除

    背景 众所周知 ,在对集合进行遍历的时候删除元素,会抛出异常 ConcurrentModificationExce...

  • Java(JavaEE)学习线路图1

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • Java学习线路图

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 大数据学习线路图

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 大数据学习教程

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 一篇文章,全面解读Android面试知识点

    Java Java基础 Java集合框架 Java集合——ArrayList Java集合——LinkedList...

  • java学习路线

    javaSE java基础语法 java文件操作 java网络操作 java多线程 java数据库操作 java ...

网友评论

      本文标题:java concurrentModificationExce

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