zoukankan      html  css  js  c++  java
  • Java中的java.util.ConcurrentModificationException异常

    今日折腾半天这个错误:

    Exception in thread "main" java.util.ConcurrentModificationException
    	at java.util.SubList.checkForComodification(AbstractList.java:752)
    	at java.util.SubList.listIterator(AbstractList.java:682)
    	at java.util.AbstractList.listIterator(AbstractList.java:284)
    	at java.util.SubList.iterator(AbstractList.java:678)
    	at java.util.AbstractCollection.toString(AbstractCollection.java:414)
    	at java.lang.String.valueOf(String.java:2826)
    	at java.lang.StringBuilder.append(StringBuilder.java:115)
    	at java.util.AbstractMap.toString(AbstractMap.java:490)
    	at java.lang.String.valueOf(String.java:2826)
    	at java.io.PrintStream.println(PrintStream.java:771)
    	at com.wrh.java.study.sentenceSimilarity.SentenceSimilarity.expressCNKI(SentenceSimilarity.java:160)
    	at com.wrh.java.study.sentenceSimilarity.SentenceSimilarity.main(SentenceSimilarity.java:263)
    

    查阅文献后发现:

      错误是在对这个list迭代的时候另外一个线程增加或者删除了list中一个元素,那么迭代函数就会抛出这个异常,而改变其中某个元素的属性值之类的,对迭代过程不影响。 
      但是,我的List肯定不会有add,remove的, List subList = list.subList(limit,offset)。而这个subList我是不会去更新它。 
      但是问题还是出现了。 调试查看subList 发现这个家伙拥有的元素内容好像还是list的内容,只不过size是limit,这样的话也就是说 list.subList返回的一个封装的subList,实际的内容还是list的内容。 

    解决方法:

      修改list.subList, 使得返回复制拷贝后的list,先new ArrayList,然后把符合条件的从list里面一个个copy过去。 
          解决的方法当然就是在函数里把List深度拷贝到参数中,最容易理解的方式就是遍历一下整个list,逐个添加到参数ArrayList中,但这样代码比较笨拙。代码更简洁的方式是调用List的addAll方法,将整个list直接加到参数ArrayList中。 

    跟我走啊~~
  • 相关阅读:
    可配置智联爬虫
    python 交错列表合并
    猫途鹰简单爬虫正则巩固
    urllib.error.URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777) 解决办法
    与MongoDB有关的面试题
    go tcp socket
    postgresql摘要
    go+postgresql服务器
    go map slice array channel 传参
    postgresql 数据库学习
  • 原文地址:https://www.cnblogs.com/wrh526/p/2660352.html
Copyright © 2011-2022 走看看