java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
2017-06-15 23:26
786 查看
问题重现:
解决方案:
从字面意思我们可以猜到,既然是并发修改异常,肯定是发生了并发修改,那么我们可以避免并发修改,就可以避免异常了。
package ArrayListDemo; import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemo { /** * @param args */ public static void main(String[] args) { ArrayList ls = new ArrayList(); ls.add("hello"); ls.add("world"); ls.add("java"); Iterator it = ls.iterator(); while(it.hasNext()){ String s = (String)it.next(); if(s.equals("world")){ ls.add("hello"); } } } }如上所述,在iterator遍历的ArrayList的同时,向集合中添加元素 hello ,会抛出并发修改异常ConcurrentModificationException,是因为迭代器 it 和 集合对象ls 同时操作 arrayList。
解决方案:
从字面意思我们可以猜到,既然是并发修改异常,肯定是发生了并发修改,那么我们可以避免并发修改,就可以避免异常了。
package ArrayListDemo; import java.util.ArrayList; import java.util.ListIterator; public class ArrayListDemo { /** * @param args */ public static void main(String[] args) { ArrayList ls = new ArrayList(); ls.add("hello"); ls.add("world"); ls.add("java"); // Iterator it = ls.iterator(); // while(it.hasNext()){ // String s = (String)it.next(); // if(s.equals("world")){ // ls.add("hello"); // } // } // 解决方案1 // 迭代器遍历,迭代器修改 // ListIterator lit = ls.listIterator(); // while(lit.hasNext()){ // String s = (String)lit.next(); // if(s.equals("world")){ // lit.add("hello"); // } // // } // System.out.println(ls.toString()); //[hello, world, hello, java] 添加成功 // 解决方案2 // 集合遍历,集合修改(普通for循环) int len = ls.size(); for(int i = 0;i<len;i++){ if(ls.get(i).equals("world")){ ls.add("hello"); } } System.out.println(ls.toString()); // [hello, world, java, hello] 添加成功 但是元素在最后 } }
相关文章推荐
- java.util.ConcurrentModificationException ,遍历集合并同时修改集合,并发造成的异常解决办法
- 深入分析集合并发修改异常(源码分析)java.util.ConcurrentModificationException
- Java集合之ConcurrentModificationException(并发修改异常)分析
- Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
- Java Iterator ListIterator 迭代器 以及 并发修改异常 ConcurrentModificationException
- 多线程报错 : Exception in thread "Thread-3" java.util.ConcurrentModificationException 并发修改异常
- Java集合迭代器之fail-fast机制: 关于java集合的遍历以及ConcurrentModificationException(并发操作异常)
- ConcurrentModificationException 集合并发修改异常 解决
- 关于java集合的遍历以及ConcurrentModificationException(并发操作异常)
- Android并发修改异常:java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException:并发修改异常!
- 在Map或者Collection的时候,不要用它们的API直接修改集合的内容(否则会出现 java.util.ConcurrentModificationException 异常)
- Java ConcurrentModificationException 异常分析与解决方案
- 【Java基础】List迭代并修改时出现的ConcurrentModificationException问题
- Java ConcurrentModificationException 异常分析与解决方案
- 【转】Java ConcurrentModificationException 异常分析与解决方案--还不错
- java 并发操作list集合导致java.util.ConcurrentModificationException
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- Java基础-ArrayList中ConcurrentModificationException错误解决
- 在多线程的情况下是由Iterator遍历修改集合对象,报ConcurrentModificationException()异常的根因分析