异常代码及解决方法
1 package com.bfxy.thread.cord.collection; 2 3 import java.util.arraylist; 4 import java.util.collection; 5 import java.util.collections; 6 import java.util.iterator; 7 import java.util.list; 8 import java.util.vector; 9 import java.util.concurrent.concurrenthashmap; 10 11 public class usesynccollection { 12 13 // 出现java.util.concurrentmodificationexception 增强for循环是多线程 不允许遍历时修改容器的元素 14 public collection<string> m1(vector<string> list) { 15 for (string temp : list) { 16 if ("3".equals(temp)) { 17 list.remove(temp); 18 } 19 } 20 return list; 21 22 } 23 // 出现java.util.concurrentmodificationexception iterator是多线程 不允许遍历时修改容器内元素 24 public collection<string> m2(vector<string> list) { 25 iterator<string> iterator = list.iterator(); 26 while (iterator.hasnext()) { 27 string temp = iterator.next(); 28 if ("3".equals(temp)) { 29 list.remove(temp); 30 } 31 } 32 return list; 33 34 } 35 //successful! 单线程 36 public collection<string> m3(vector<string> list) { 37 for (int i = 0; i < list.size(); i++) { 38 if ("3".equals(list.get(i))) { 39 list.remove(i); 40 } 41 } 42 return list; 43 } 44 45 46 public static void main(string[] args) { 47 48 vector v = new vector<>(); 49 v.add("1"); 50 v.add("2"); 51 v.add("3"); 52 usesynccollection test = new usesynccollection(); 53 collection<string> ret1 = test.m1(v); 54 system.err.println(ret1.tostring()); 55 56 // collection<string> ret2 = test.m2(v); 57 // system.err.println(ret2.tostring()); 58 59 // collection<string> ret3 = test.m3(v); 60 // system.err.println(ret3.tostring()); 61 62 63 // list<string> list = new arraylist<>(); 64 // collections.synchronizedcollection(list); 65 66 } 67 }
如对本文有疑问, 点击进行留言回复!!
网友评论